本部分通过三个简单实例,介绍Opencv程序的整体架构,并介绍简易的读取可写入方法等基本操作,认识一些基本的库;
0、头文件include
1、读取显示图片
2、读取显示视频
3、视频快进快退
4、简易变换
5、稍难变换
6、从相机输入
7、写视频
0、头文件include
#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、读取显示图片
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 #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 #include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"int main(int argc, char** argv) {