《OpenCV3编程入门》学习笔记一:邂逅OpenCV

来源:互联网 发布:生产流程优化 编辑:程序博客网 时间:2024/05/20 04:47

一:内容介绍

本节主要介绍以下内容: 
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/ ; 
一些博客:http://blog.csdn.net/zhmxy555/article/category/1923021,http://blog.csdn.net/baimafujinji/article/details/48467225 , http://blog.csdn.net/yang_xian521/article/category/910716/4 。 
还有我们大部分人都是因为想要学视觉所以才会接触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;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

素材: 
这里写图片描述 
效果图: 
略 
提示: 
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;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

素材: 
略,自己随便找个视频就行 
效果图: 
略 
提示: 
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;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

素材: 
无 
效果图: 

阅读全文
0 0