opencv3学习之图像显示及腐蚀/模糊/Canny边缘检测的处理

来源:互联网 发布:vgg19网络结构图 编辑:程序博客网 时间:2024/06/05 04:47

几个小程序,很好理解。

//1.图像的显示

#include <opencv2/opencv.hpp>

using namespace cv;//cv命名空间

int main()

{

   

    Mat srcImage=imread("/Users/oumoemoe/Downloads/apple.jpg",199);//199是三通道彩色图像,0是灰度图像,2|4是无损图像

    imshow("原始图", srcImage);//显示图像

    waitKey(0);

    return 0;

    

}

//2.图像腐蚀效果

#include <opencv2/highgui/highgui.hpp>

#include <opencv2/opencv.hpp>

#include <opencv2/imgproc/imgproc.hpp>

using namespace cv;

int main(){

    Mat srcImage=imread("/Users/oumoemoe/Downloads/apple.jpg");//图像载入

    imshow("原图像", srcImage);//显示原图像

    Mat element=getStructuringElement(MORPH_CROSS, Size(20,20));//返回的是形状和尺寸,注意size的大小写,这个size指的是腐蚀的大小

     /*OpenCV提供了一个函数getStructuringElement,可以获取常用的结构元素的形状:矩形(包括线形)、椭圆(包括圆形)及十字形

     (像马赛克那种) MORPH_RECT MORPH_ELLIPSE MORPH_CROSS */

 

    Mat dstImage;//声明一个变量用来存放处理后的图像

    erode(srcImage, dstImage, element);//处理图像,erode腐蚀的意思,很形象。简单的参数传递。

    imshow("图像腐蚀效果",dstImage);//显示处理后的图像

    waitKey(0);

    return 0;


}

//3.图像模糊效果

#include <opencv2/highgui/highgui.hpp>

#include <opencv2/imgproc/imgproc.hpp>

using namespace cv;

int main(){

    Mat srcImage=imread("/Users/oumoemoe/Downloads/building.png");

    imshow("原图像", srcImage);

    Mat dstImage;

    blur(srcImage, dstImage, Size(20,20));//进行均值滤波操作,blur函数可以通过图像模糊来降噪,降低噪点的目的是为了完善画质。

       //把图像放大会发现有很多黑点,降噪就是通过模糊来去除这些黑点。

    imshow("图像模糊效果", dstImage);

    waitKey(0);

    return 0;

}

噪声都是高频信号,设计滤波器就是通过降低高频成分来减弱噪声影响。

OpenCV中常用的滤波器有五种:

方框滤波——boxblur函数

均值滤波——blur函数

高斯滤波——GaussianBlur函数

中值滤波——medianBlur函数

双边滤波——bilateralFilter函数

因为用到了blur函数,所以详细看了一下blur均值滤波器的用法。

blur( InputArray src, OutputArray dst,Size ksize);

第一个参数就是输入图像,第二个参数是输出的图像,这个有一个要求就是要和原图像尺寸类型一致。所以前面要处理一下。(QUESTION:但是我这个程序里没有用到Clone函数,也成功了,为什么呢,Clone函数应该怎么用呢,等我学完一圈回来解决)

第三个参数,Size类型的ksize,内核的大小。一般这样写Size( w,h )来表示内核的大小( 其中,w 为像素宽度, h为像素高度)。Size(3,3)就表示3x3的核大小,Size(5,5)就表示5x5的核大小,内核大小其实就是矩阵大小。




//4.Canny边缘检测(具体原理有点复杂,我没看懂,明天解决)

#include <opencv2/highgui/highgui.hpp>

#include <opencv2/imgproc/imgproc.hpp>

using namespacecv;

int main(){

    Mat srcImage=imread("/Users/oumoemoe/Downloads/building.png");

    imshow("原图", srcImage);

    Mat dstImage,edge,grayImage;

    dstImage.create(srcImage.size(), srcImage.type());

    cvtColor(srcImage, grayImage,COLOR_BGR2GRAY);//图像灰度处理

    blur(grayImage, edge,Size(3,3));//模糊处理

    Canny(edge, edge, 3, 9,3);//Canny算子

    imshow("边缘检测", edge);

    waitKey(0);

    return 0;

}



阅读全文
0 0
原创粉丝点击