跳转至

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;
}