|
发表于 2023-4-3 12:33:40
|
显示全部楼层
以下是关于这些库函数的简介和一些简单的代码示例:
1、threshold函数
threshold函数可以用于对图像进行二值化处理。以下是一个简单的例子:
- #include <opencv2/opencv.hpp>
- using namespace cv;
- int main() {
- Mat image = imread("image.jpg");
- Mat grayImage, binaryImage;
- cvtColor(image, grayImage, COLOR_BGR2GRAY);
- threshold(grayImage, binaryImage, 100, 255, THRESH_BINARY);
- imshow("binary image", binaryImage);
- waitKey(0);
- return 0;
- }
复制代码
这个程序使用threshold函数将灰度图像二值化,并使用imshow函数显示结果。
2、cvtColor函数
cvtColor函数可以用于将图像从一种颜色空间转换到另一种颜色空间。以下是一个简单的例子:
- #include <opencv2/opencv.hpp>
- using namespace cv;
- int main() {
- Mat image = imread("image.jpg");
- Mat grayImage;
- cvtColor(image, grayImage, COLOR_BGR2GRAY);
- imshow("gray image", grayImage);
- waitKey(0);
- return 0;
- }
复制代码
这个程序使用cvtColor函数将彩色图像转换为灰度图像,并使用imshow函数显示结果。
3、findContours函数
findContours函数可以用于寻找图像中的轮廓。以下是一个简单的例子:
- #include <opencv2/opencv.hpp>
- using namespace cv;
- int main() {
- Mat image = imread("image.jpg");
- Mat grayImage, binaryImage;
- cvtColor(image, grayImage, COLOR_BGR2GRAY);
- threshold(grayImage, binaryImage, 100, 255, THRESH_BINARY);
- std::vector<std::vector<Point>> contours;
- findContours(binaryImage, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
- Mat resultImage = Mat::zeros(binaryImage.size(), CV_8UC3);
- drawContours(resultImage, contours, -1, Scalar(0, 0, 255), 2);
- imshow("contours", resultImage);
- waitKey(0);
- return 0;
- }
复制代码
这个程序使用findContours函数寻找二值图像中的轮廓,并使用drawContours函数将轮廓绘制在一个新图像上。
4、dilate函数
dilate函数可以用于对图像进行膨胀处理。以下是一个简单的例子:
- #include <opencv2/opencv.hpp>
- using namespace cv;
- int main() {
- Mat image = imread("image.jpg");
- Mat grayImage, binaryImage;
- cvtColor(image, grayImage, COLOR_BGR2GRAY);
- threshold(grayImage, binaryImage, 100, 255, THRESH_BINARY);
- Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5));
- Mat dilateImage;
- dilate(binaryImage, dilateImage, kernel);
- imshow("dilate image", dilateImage);
- waitKey(0);
- return 0;
- }
复制代码
这个程序使用dilate函数对二值图像进行膨胀,并使用imshow函数显示结果。
5、Laplacian函数
Laplacian函数可以用于计算图像的拉普拉斯算子。以下是一个简单的例子:
- #include <opencv2/opencv.hpp>
- using namespace cv;
- int main() {
- Mat image = imread("image.jpg");
- Mat grayImage;
- cvtColor(image, grayImage, COLOR_BGR2GRAY);
- Mat laplacianImage;
- Laplacian(grayImage, laplacianImage, CV_16S);
- convertScaleAbs(laplacianImage, laplacianImage);
- imshow("laplacian image", laplacianImage);
- waitKey(0);
- return 0;
- }
复制代码
这个程序使用Laplacian函数计算灰度图像的拉普拉斯算子,并使用convertScaleAbs函数将结果转换为8位无符号整型图像,并使用imshow函数显示结果。
6、Sobel函数
Sobel函数可以用于计算图像的Sobel算子。以下是一个简单的例子:
- #include <opencv2/opencv.hpp>
- using namespace cv;
- int main() {
- Mat image = imread("image.jpg");
- Mat grayImage;
- cvtColor(image, grayImage, COLOR_BGR2GRAY);
- Mat sobelImage;
- Sobel(grayImage, sobelImage, CV_16S, 1, 1);
- convertScaleAbs(sobelImage, sobelImage);
- imshow("sobel image", sobelImage);
- waitKey(0);
- return 0;
- }
复制代码
这个程序使用Sobel函数计算灰度图像的Sobel算子,并使用convertScaleAbs函数将结果转换为8位无符号整型图像,并使用imshow函数显示结果。
7、Canny函数
Canny函数可以用于进行边缘检测。以下是一个简单的例子:
- #include <opencv2/opencv.hpp>
- using namespace cv;
- int main() {
- Mat image = imread("image.jpg");
- Mat grayImage;
- cvtColor(image, grayImage, COLOR_BGR2GRAY);
- Mat cannyImage;
- Canny(grayImage, cannyImage, 100, 200);
- imshow("canny image", cannyImage);
- waitKey(0);
- return 0;
- }
复制代码
这个程序使用Canny函数对灰度图像进行边缘检测,并使用imshow函数显示结果。
8、HoughLines函数
HoughLines函数可以用于检测图像中的直线。以下是一个简单的例子:
#include <opencv2/opencv.hpp>
using namespace cv;
- int main() {
- Mat image = imread("image.jpg");
- Mat grayImage, cannyImage;
- cvtColor(image, grayImage, COLOR_BGR2GRAY);
- Canny(grayImage, cannyImage, 100, 200);
- std::vector<Vec2f> lines;
- HoughLines(cannyImage, lines, 1, CV_PI / 180, 100);
- Mat resultImage = image.clone();
- for (size_t i = 0; i < lines.size(); i++) {
- float rho = lines[i][0], theta = lines[i][1];
- Point pt1, pt2;
- double a = cos(theta), b = sin(theta);
- double x0 = a * rho, y0 = b * rho;
- pt1.x = cvRound(x0 + 1000 * (-b));
- pt1.y = cvRound(y0 + 1000 * a);
- pt2.x = cvRound(x0 - 1000 * (-b));
- pt2.y = cvRound(y0 - 1000 * a);
- line(resultImage, pt1, pt2, Scalar(0, 0, 255), 2, LINE_AA);
- }
- imshow("hough lines", resultImage);
- waitKey(0);
- return 0;
- }
复制代码
这个程序使用`Canny`函数对灰度图像进行边缘检测,然后使用`HoughLines`函数检测图像中的直线,
并使用`line`函数将直线绘制在原始图像上,最后使用`imshow`函数显示结果。
希望以上关于这些库函数的简介和示例可以帮助你更好地理解和学习OpenCV C++。
|
|