一:内容介绍
本节主要介绍以下内容:
1. OpenCV3环境搭建
2. 快速上手尝试:图像显示、读取并播放视频、调用摄像头采集图像
二:学习笔记
1. 环境配置
在OpenCV3中,项目架构发生了一些变化,除了主仓库外新增了opencv_contrib仓库,里面包含人脸识别、新的边缘检测、SIFT算子、新的光流和追踪算法等。个人建议最好是配置一下opencv_contrib库,毕竟我们还是尽量跟随潮流用一些比较新的东西。关于环境配置可参照之前的博文:Opencv3.1.0+opencv_contrib配置及使用SIFT测试 ,里边ubuntu和windows下环境配置的方法都有,但在平常使用时我们一般以windows为主。 另外,强烈建议在VS平台上安装ImageWatch插件,opencv调试利器,参考Opencv+VS插件推荐:调试过程内存中图片Mat变量查看器Image Watch
2. 初试opencv
安装好之后自然就要用了,这里我们可以先尝试一下 图像显示、读取并播放视频及调用摄像头采集图像。很简单具体就不解释了,详见第三部分相关源码。
3. 学习资料
A. 首先官网doc肯定是最重要的,要常逛:http://docs.opencv.org/3.1.0/ ,大家主要关注HighGUI(学习笔记三)、Core(学习笔记四、五)、Imgproc(学习笔记六、七、八、九)和feature2d模块(十、十一); 其他的一些还有http://answers.opencv.org/questions/ , http://www.opencv.org.cn/ ; 一些博客:, , 。 还有我们大部分人都是因为想要学视觉所以才会接触OpenCV,这里强烈推荐Stanford Vision Lab
B. OpenCV说到底只是一个函数库,而我们也只是调用它的接口而已。
在学习过程中建议多点进去看一看相关的源码,看别人怎么实现的,多从数字的角度想一想这个函数实现了什么功能;
还有可以学习一下OpenCV里边C++的实现方法,里面大量使用了函数模板、智能指针等,好多开源的优秀库都是这样,很值得学习;
学习视觉一定要代码与原理并重,推公式和写代码一样重要,甚至经过时间的消磨,前者更重要。我身边一般备有书籍《OpenCV3编程入门》、《数字图像处理原理与实践(MATLAB版)》,《数字图像处理与机器视觉——Visual C++与Matlab实现》。七月视觉课上老师推荐了一本《Computer Vision:Algorithms and Applications》(计算机视觉——算法与应用),我没看,应该不错,呵呵。
三:相关源码及解析
1. 图像显示
源码:
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat srcImage = imread("poster_flower_2.jpg");
imshow("【窗口名】", srcImage);
waitKey(0); //等待任何按键触发
return 0;
}
素材:
效果图:
略
提示:
A. 图片文件的名称和代码中的名称要一致
B. 一般情况下我们只需要包含头文件opencv2/opencv.hpp即可,因为里边已经包含了核心库的所有头文件,大家可以打开看一下。
2. 读取并播放视频
源码:
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
VideoCapture capture("video_dota2.avi");
Mat frame;
capture >> frame; //读入一帧图像
//循环显示每一帧
while (!frame.empty())
{
imshow("data2", frame);
waitKey(30);
capture >> frame;
}
return 0;
}
素材:
略,自己随便找个视频就行
效果图:
略
提示:
A. 视频文件的名称和代码中的名称要一致
B. 一般情况下我们只需要包含头文件opencv2/opencv.hpp即可,因为里边已经包含了核心库的所有头文件,大家可以打开看一下。
3. 调用摄像头采集图像
源码:
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
VideoCapture capture(0); //当只有一个摄像头时默认device id为0
while(1)
{
Mat frame;
capture >> frame;
imshow("【摄像头】", frame);
waitKey(30);
}
return 0;
}
素材:
无
效果图:
略