第二章 介绍OpenCV
文章目录
以下是本人阅读《Learning OpenCV3》后的一些体会和笔记,没有详细的全文翻译,恳请批评指正。
一、头文件和命名空间
OpenCV有很多头文件,你可以用opencv.hpp
包含所有的OpenCV函数,但此时编译时间就会变长。也可以用各个模块的头文件,例如imgproc.hpp
。
命名空间using namespace cv;
不要忘了,可以不用在OpenCV的函数前面写cv::
。
二、读取图片和视频
2.1 读取图片
头文件:
头文件highgui.hpp
(high-level graphical user interface),用在读取、输入输出、鼠标、按键、滑条中。
Mat 类:
Mat img = imread( argv[1], -1 );
Mat类负责图像数据的存储,可以总动分配和释放内存(就像数据结构里面的STL一样)。
显示图像:
namedWindow( "Example 2-1", cv::WINDOW_AUTOSIZE );
创建一个窗口。
imshow( "Example 2-1", img );
显示图像。
destroyWindow( "Example 2-1" );
关闭窗口。
2.2 读取视频
视频是通过for循环,一帧一帧读取的。
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
int main( int argc, char** argv ) {
cv::VideoCapture cap;
cap.open( string(argv[1]) );
cout <<"Opened file: " <<argv[1] <<endl;
cv::Mat frame;
for(;;) {
cap >> frame;
if( frame.empty() ) break; // Ran out of film
cv::imshow( "Example 2-3", frame );
if( (char)cv::waitKey(33) >= 0 ) break;
}
return 0;
}
VideoCapture cap;
VideoCapture类负责视频的读取。
cap.open( string(argv[1]) );
初始化视频的信息,例如大小、路径等