一:内容介绍

本节主要介绍以下内容:
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;
}

素材:

opencv开发语言 opencv编程_opencv开发语言


效果图:


提示:

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;
}

素材:

效果图: