OpenCV 1.0
1.显示图像
#include "highgui.h"
int main() {
// 加载图像文件到内存
// cvLoadImage自动分配图像数据结构所需的内存
// 可读取的图像格式:BMP,DIB,JPEG,JPE,PNG,PBM,PPM,SR,RAS,TIFF
IplImage *img = cvLoadImage("../pictures/bear.jpeg"); // 用了相对路径
// 创建窗口,参数2:窗口会根据图像实际大小自动进行拉伸或缩放
cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE);
// 在已创建的窗口中显示图像
cvShowImage("Example1", img); // 第一个参数为Example1,在Example1窗口中显示
// 程序暂停,等待用户出发一个按键(如 command + Q 退出)
// cvWaitKey(4000); // 毫秒,4s之后程序自动退出
cvWaitKey(0); // 设为0或负数,程序一直等待直到用户出发操作
// 用完图像之后,释放内存,release之后,img = NULL
cvReleaseImage(&img); // 参数类型:IplImage *
// 销毁显示图像文件的窗口
cvDestroyWindow("Example1");
return 0;
}
2.播放mp4视频
播放视频:循环地读取视频中的每一帧
#include "highgui.h"
int main() {
// 创建窗口
cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE);
CvCapture *capture = cvCreateFileCapture("../videos/day.mp4"); // capture保存了视频所有帧
// IplImage 读取每一帧图像
IplImage *frame;
// 循环读取视频的帧
while (1) {
frame = cvQueryFrame(capture); // 从capture中Query下一帧
if (!frame) // 帧读完,退出
break;
cvShowImage("Example2", frame);
// 自定义退出
int c = cvWaitKey(10); // 每一帧等待10ms,在用户没有按键的情况下,cvWaitKey返回 -1
if (c == 27) // esc的ASCII码,按esc,退出
break;
}
// 释放,摧毁
cvReleaseCapture(&capture);
cvDestroyWindow("Example2");
return 0;
}
OpenCV2.0显示图像
步骤:
- 读取图片(Mat数据结构, imread函数)
- 设置窗口(namedWindow函数)
- 将图片显示在窗口中(imshow函数)
- 设置退出(waitKey函数)
OpenCV 2.0 不需要在程序末尾设置内存释放和窗口销毁。
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv; // OpenCV中的C++类和函数都是定义在命名空间cv之内的
int main() {
// Mat对应OpenCV1.0中的IplImage
Mat bear = imread("../pictures/bear.jpeg");
// CV_WINDOW_NORMAL:窗口大小可以调整
// CV_WINDOW_AUTOSIZE: 自适应图片大小,窗口大小不可调整
namedWindow("bear", CV_WINDOW_AUTOSIZE);
imshow("bear", bear);
waitKey(3000); // 3s后退出
}