更多更详细的文章请关注微信公众号:SLAM之路
本部分通过三个简单实例,介绍Opencv程序的整体架构,并介绍简易的读取可写入方法等基本操作,认识一些基本的库;
0、头文件include
1、读取显示图片
2、读取显示视频
3、视频快进快退
4、简易变换
5、稍难变换
6、从相机输入
7、写视频
0、头文件include
C语言前段包含了头文件,而Opencv的库文件通过include构造了模块化的函数库,可根据实际应用情况进行选择,以提高运编译速度;或者使用总的文件库,包含了OpenCV2每个函数库,include/opencv2/opencv.hpp;
#include "opencv2/core/core_c.h" :C语言数据结构和算法函数库
#include "opencv2/core/core.hpp" :C++数据结构和算法函数库
#include "opencv2/highgui/highgui_c.h"C图像显示/滑动/鼠标交互
#include "opencv2/highgui/highgui.hpp" C++显示/滑动/鼠标交互
#include "opencv2/imgproc/imgproc_c.h" C语言图像处理函数库
#include "opencv2/imgproc/imgproc.hpp"C++图像处理函数库
#include "opencv2/flann/miniflann.hpp" 最近邻匹配函数库
#include "opencv2/video/photo.hpp" 面向处理和恢复图像的函数库
#include "opencv2/video/video.hpp" 视频跟踪及背景分割函数库
#include "opencv2/features2d/features2d.hpp" 二维特征跟踪支持库
#include "opencv2/objdetect/objdetect.hpp" 面部探测
#include "opencv2/calib3d/calib3d.hpp" 3D标定
#include "opencv2/ml/ml.hpp" 机器学习
1、读取显示图片
#include<opencv2/opencv.hpp> #inlude every supported opencv function
//也可以使用具体的函数库#include "opencv2/highgui/highgui.hpp"
//Opencv的函数都存在于一个命名空间:cv,为了调用函数必须使用cv::格式
//为避免这种繁琐写法,可以在程序开始使用using namespace cv;即可省略cv::
int main(int argc, char** arvv{
cv::Mat img = cv::imread(argv[1],-1);
//cv::Mat 默认照片格式,-1表示灰度图像,使用这种数据结构处理各种图像:单通道、多通道、整型浮点型数据;
//cv::imread()可读取BMP/DIB/JPEG/JPE/PNG等等图片,并根据图像数据结构分配内存。
if(img.empty())return -1;
//判断图像是否为空
cv::namedWindow("Example1",cv::WINDOW_AUTOSIZE);
//打开窗口,定义窗口性质:窗口标题名及大小(0:表示固定窗口)
cv::imshow("Example1",img);
//图像名称,必须与namedWindow一致;
cv::waitKey(0);
//图像框显示时间,0表示始终直到其他操作;正数表示停留时间(毫秒);
cv::destroyWindow("Example1");
//关掉图相框,重新分配内存;当程序复杂时,应当合理运用
return 0;
)
2、读取显示视频
本质上是按顺序读取图片,即增加一个循环并决定何时循环结束;
#include <iostream>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
int main(int argc, char** argv) {
cv::namedWindow("Example3", 0);
//创建显示窗口,名字叫Example3,可自由变换大小
cv::VideoCapture cap;
//cv::VideoCapture视频捕捉对象,该对象可打开关闭多种ffmpe