OpenCV 1.0
1.顯示圖像
#include "highgui.h"
int main() {
// 加載圖像文件到內(nèi)存
// cvLoadImage自動分配圖像數(shù)據(jù)結(jié)構(gòu)所需的內(nèi)存
// 可讀取的圖像格式:BMP,DIB,JPEG,JPE,PNG,PBM,PPM,SR,RAS,TIFF
IplImage *img = cvLoadImage("../pictures/bear.jpeg"); // 用了相對路徑
// 創(chuàng)建窗口停士,參數(shù)2:窗口會根據(jù)圖像實際大小自動進(jìn)行拉伸或縮放
cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE);
// 在已創(chuàng)建的窗口中顯示圖像
cvShowImage("Example1", img); // 第一個參數(shù)為Example1,在Example1窗口中顯示
// 程序暫停,等待用戶出發(fā)一個按鍵(如 command + Q 退出)
// cvWaitKey(4000); // 毫秒棺聊,4s之后程序自動退出
cvWaitKey(0); // 設(shè)為0或負(fù)數(shù)谦趣,程序一直等待直到用戶出發(fā)操作
// 用完圖像之后慰照,釋放內(nèi)存富腊,release之后,img = NULL
cvReleaseImage(&img); // 參數(shù)類型:IplImage *
// 銷毀顯示圖像文件的窗口
cvDestroyWindow("Example1");
return 0;
}
2.播放mp4視頻
播放視頻:循環(huán)地讀取視頻中的每一幀
#include "highgui.h"
int main() {
// 創(chuàng)建窗口
cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE);
CvCapture *capture = cvCreateFileCapture("../videos/day.mp4"); // capture保存了視頻所有幀
// IplImage 讀取每一幀圖像
IplImage *frame;
// 循環(huán)讀取視頻的幀
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數(shù)據(jù)結(jié)構(gòu), imread函數(shù))
- 設(shè)置窗口(namedWindow函數(shù))
- 將圖片顯示在窗口中(imshow函數(shù))
- 設(shè)置退出(waitKey函數(shù))
OpenCV 2.0 不需要在程序末尾設(shè)置內(nèi)存釋放和窗口銷毀噩凹。
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv; // OpenCV中的C++類和函數(shù)都是定義在命名空間cv之內(nèi)的
int main() {
// Mat對應(yīng)OpenCV1.0中的IplImage
Mat bear = imread("../pictures/bear.jpeg");
// CV_WINDOW_NORMAL:窗口大小可以調(diào)整
// CV_WINDOW_AUTOSIZE: 自適應(yīng)圖片大小,窗口大小不可調(diào)整
namedWindow("bear", CV_WINDOW_AUTOSIZE);
imshow("bear", bear);
waitKey(3000); // 3s后退出
}