@[TOC]OpenCV初探
OpenCV初探
作为一名正在学习计算机视觉但是编程基础不太好的小白,在学习专业的一些知识的时候我感觉到很吃力,同时也花了很多时间来学习新的东西,不仅是我,同专业的同学们也存在这样或者那样的问题,所以我想到记录一下自己学习的心得,同时也是对所学知识的巩固和总结。阅读此专栏需要对C++有基本的了解,并且已经安装配置好了OpenCV。笔者选用的开发环境为OpenCV4.4.0+VS2019。
该专栏记录的是学习OpenCV(C++)的心得,主要从实际操作方面入手,希望能够对大家有所帮助,如果有任何的错误或者疑问都欢迎交流。
第一个程序:显示图片
显示图像是OpenCV最简单最基本的程序,需要使用到imread函数载入图片到图像存储数据结构Mat(类似于int,Mat用来定义图像文件)中,然后用imshow函数显示即可,具体代码实现如下:
#include<opencv2/opencv.hpp>
int main()
{
cv::Mat img;
img = cv::imread("1.jpg");//载入图片“1.jpg”该图像需包含在工程文件路径中,或者在引号内输入指定路径
cv::imshow("Picture", img);//显示图片
cv::waitKey(0);//等待任意键按下
return 0;
}
程序的运行结果如下:
第二个程序:对图像进行均值滤波
均值滤波使用到的是blur函数,以下是blur函数的声明:
CV_EXPORTS_W void blur( InputArray src, OutputArray dst,
Size ksize, Point anchor = Point(-1,-1),
int borderType = BORDER_DEFAULT );
第一个参数为输入图像,第二个参数为输出图像,第三个参数是均值滤波器的大小,接下来我们对前文中显示图像做一个均值滤波处理,模板大小为7*7:
#include<opencv2/opencv.hpp>
int main()
{
cv::Mat img;
cv::Mat dst;
img = cv::imread("1.jpg");//载入图片“1.jpg”该图像需包含在工程文件路径中,或者在引号内输入指定路径
cv::blur(img, dst, cv::Size(7, 7));//模板为7*7的均值滤波操作
cv::imshow("Picture", dst);//显示图片
cv::waitKey(0);//等待任意键按下
return 0;
}
以下是经过均值滤波后得到的图像:
第三个程序:读取并播放视频
OpenCV提供了VideoCapture类,用于对视频进行读取显示,以及调用摄像头。而在OpenCV上显示视频,需要将视频一帧一帧用图像显示出来。
使用VideoCapture读入视频的方法有两种,这两种方法都是可行的:
(1)先实例化再初始化:
VideoCapture Capture;
capture.open(“1.mp4”);
(2)在实例化的同时进行初始化:
VideoCapture capture(“1.mp4”);
类似于"int a;a=1;"和"int a=1;"的区别。
接下来将用具体的事例说明如何读取和播放视频:
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
VideoCapture cap;
cap.open("1.mp4");//读入视频
while (1) {
Mat frame;//储存每一帧的图像
cap >> frame;//读取当前帧
imshow("Video", frame);//显示当前帧
waitKey(10);//等待10ms,若无键盘输入进入下一循环
}
}
同样,在程序的工程文件中需含有对应的视频文件,下面是运行结果(这销魂的Mario):
结语
OpenCV是一个很有意思的东西,反正我已经上头了()。下一篇文章我们聊聊HighGUI模块。