OpenCV¶
Hello OpenCV¶
环境配置¶
环境配置超详细的教程:https://blog.csdn.net/m0_37360684/article/details/89716881
简单函数¶
显示图片¶
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
string path=""
Mat img = imread(path);
imshow("colored", img);
Mat grey = imread(path);
imshow("grey", grey);
//imread()函数有两个参数,第一个参数是图片的路径或图片的名字,第二个参数是以何种格式来读取图片。
//默认值是1,也就是原本的格式读取;如果输入参数为0的话就是以黑白格式读取。
Mat grey2;
cvtColor(img,grey2, COLOR_BGR2GRAY);
imshow("grey 2", grey2);
//或者使用cvtColor
waitKey(0);
return 0;
}
模糊图片¶
三种形态学处理:腐蚀,膨胀,滤波。
膨胀:dilate() 。对图像的边界进行扩张。膨胀就是求局部最大值的操作。从数学角度来说,就是将图像与核进行池化,计算核B覆盖区域的像素点的最大值,并把这个最大值赋值给参考点指定的元素。这样就会使图像中的高亮区域逐渐增长。
腐蚀:erode() 。腐蚀和膨胀是相反的操作,腐蚀是求局部最小值的操作。腐蚀操作会使图像中的高亮区逐渐减小。
腐蚀和膨胀的主要功能 1. 消除噪声 2. 分割出独立的图像元素,在图像中连接相邻的元素 3. 寻找图像中的极大值或者极小值区域 4. 求出图像的梯度
滤波:滤波是用来去噪的,外界的干扰可能会掩盖图像的一些特征,使得图像变得模糊,使用滤波可以让图像特征更加明显。(PS:是特征更加明显,不一定代表图片看起来更加清晰。
腐蚀和膨胀¶
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
string path = "";
Mat src = imread(path);
imshow("src", src);
Mat dst1, dst2;
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
erode(src, dst1, element);
imshow("erode", dst1);
dilate(src, dst2, element);
imshow("dilate", dst2);
waitKey(0);
return 0;
}
模糊¶
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
string path = "";
Mat src = imread(path);
imshow("src", src);
Mat dst;
blur(src, dst, Size(7, 7)); //1.输入图像,2.输出图像,3.进行滤波时选择小矩阵的大小(注意要要是n*n的矩阵,且n为奇数)。
imshow("blur", dst);
waitKey(0);
return 0;
}
边缘检测¶
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{ //流程:读图,灰度化,滤波,边缘检测。
string path = "";
Mat src = imread(path);
imshow("src", src);
Mat dst;
cvtColor(src, src, COLOR_BGR2GRAY);
blur(src, src, Size(3, 3));
Canny(src, dst, 3, 9, 3);//1.输入2.输出3.最小阈值4.最大阈值5.sobel算子的大小
imshow("canny", dst);
//最大最小阈值用来使在阈值范围内的像素值才能保留。sobel算子的用处是与原图进行卷积运算,得到一个新的图,这个图根据阈值范围留下数据后就是效果图。
waitKey(0);
return 0;
}