• 快速上手OpenCV小程序


    序言:编写这些小程序有点跟写的意思,也是让新手提前适应OpenCV的基础用法。

    文章目录


    1、图像显示
    2、图像腐蚀
    3、blur图像模糊
    4、canny边缘检测
    5、读取并播放视频

    一、图像显示

    说明:用imread函数载入到新版本的图像存储数据结构Mat类(后期会详细介绍)中,然后用imshow函数显示即可。

    #include<opencv2/opencv.hpp>
    using namespace cv;
    int main()
    {
    	//载入图片
    	Mat src = imread("D:\\12.jpg");
    	//显示图片
    	imshow("原始图", src);
    	waitKey(0);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    二、图像腐蚀:腐蚀即用图像中的暗色部分“腐蚀”掉图像中的高亮部分。

    说明:程序首先载入和显示一幅图像,然后定义一个Mat类型的变量来获取 getStructuringElement函数的返回值,这个函数发返回值指的是定性质和尺寸的结构元素。调用erode()函数进行图像腐蚀操作。

    //进行腐蚀操作
    	Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
    	Mat dstImage;
    	erode(src, dstImage, element);
    	imshow("效果图", dstImage);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    三、图像模糊:对图像进行均值滤波操作,模糊一幅图像。

    //进行均值滤波操作
    	Mat dstImage;
    	blur(src, dstImage, Size(7, 7));
    	imshow("均值滤波", dstImage);
    
    • 1
    • 2
    • 3
    • 4

    四、canny边缘检测

    说明:载入图像之后,将图像转化成灰度图,再用blur函数进行图像模糊以降噪,如何用canny函数进行边缘检测

    #include<opencv2/opencv.hpp> 
    #include<opencv2/highgui/highgui.hpp>//opencv highgui模块头文件
    #include<opencv2/imgproc/imgproc.hpp>//图像处理头文件
    using namespace cv;
    int main()
    {
    	//载入图片
    	Mat src = imread("D:\\12.jpg");
    	//显示图片
    	imshow("原始图", src);
    	Mat dstImage, edge, grayImage;//参数定义
    	//创建与src同类型和大小的矩阵
    	dstImage.create(src.size(), src.type());
    	//将原始图转化为灰度图
    	cvtColor(src, grayImage, COLOR_BGR2GRAY);
        imshow("灰度图", grayImage);
    	//使用3x3内核来降噪
    	blur(grayImage, edge, Size(3, 3));
    	//运行Canny算子
    	Canny(edge, edge, 3, 9, 3);
    	//显示效果
    	imshow("边缘检测效果图", edge);
    	waitKey(0);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    在这里插入图片描述
    在这里插入图片描述
    五、读取并播放视频

    说明:通过对VideoCapture类的分享,可以发现利用它读入视频的方法一般有以下两种

    (1)先实例化再初始化

    VideoCapture capture;
    capture.open("1.avi");
    类似:int a; a=1;
    
    • 1
    • 2
    • 3

    (2)在实例化的同时进行初始化

    VideoCapture capture("1.avi");
    类似:int a=1;
    
    • 1
    • 2

    当视频读入到VideoCapture类对象之后,紧接着可以用一个循环将每一帧显示出来

    while(1)
    {
        //定义Mat变量,存储每一帧的图像
        Mat frame;
        //读取当前帧
        capture>>frame;
        //显示当前帧
        imshow;
        //延时30ms
        waitKey(30);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    程序源码:

    #include<opencv2/opencv.hpp>
    using namespace cv;
    int main()
    {
    	//读入视频
    	VideoCapture capture("D:\\1.mp4");
    	//循环显示每一帧
    	while (1)
    	{
    		//定义Mat变量,存储每一帧的图像
    		Mat frame;
    		//读取当前帧
    		capture >> frame;
    		//显示当前帧
    		imshow("读取视频", frame);
    		//延时30ms
    		waitKey(30);
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在这里插入图片描述

  • 相关阅读:
    Spring MVC组件之HandlerMapping
    关于我一份阿里内部“Java面试核心笔记”,秋招拿下大厂offer这件事
    iOS代码混淆工具推荐:IPA Guard详细介绍
    Unirech阿里云国际版云服务器代充-使用Python批量创建实例
    c++ || 智能指针
    微信小程序八(自定义tabBar)
    如何让FileBeat支持http的output插件
    水库大坝安全管理主要问题和维护措施
    pycharm中使用Ctrl+Shift+F10快捷键运行py脚本时自动打开了vscode
    【周赛复盘】LeetCode第304场单周赛
  • 原文地址:https://blog.csdn.net/qq_44859533/article/details/124999075