萬里之行第一步,打開圖片和視頻,然後才能進行下一步操作。(《學習OpenCV》P18-23,P30-31)
cvLoadImage中的參數爲圖片地址,cvCreateFileCapture中的參數爲視頻地址,斜槓要用\\或者/,不要直接用\,否則會出問題。
基本步驟都差不多,圖片是用一個IplImage*類型的img接收打開的圖片,然後建個窗口,將圖片顯示在窗口。
視頻是用一個CvCapture*類型的capture接收打開的視頻,然後一幀幀讀視頻裏的每張圖片,然後顯示在窗口。不過每次循環要用cvWaitKay等待一個時間間隔,不然所有幀擠在同一時刻是打不開的。
#include"highgui.h"
int main(){
//顯示圖像
IplImage* img = cvLoadImage("D:\\OPENCV實驗\\lena.jpg");
cvNamedWindow("顯示圖像",CV_WINDOW_AUTOSIZE);
cvShowImage("顯示圖像",img);
//播放視頻
CvCapture* capture = cvCreateFileCapture("D:\\OPENCV實驗\\David.gif");
cvNamedWindow("播放視頻", CV_WINDOW_AUTOSIZE);
while (1){
img = cvQueryFrame(capture);
if (!img){
break;
}
cvShowImage("播放視頻", img);
cvWaitKey(10);
}
cvReleaseImage(&img);
cvReleaseCapture(&capture);
cvDestroyWindow("顯示圖像");
cvDestroyWindow("播放視頻");
return(0);
}
當然,cvCreateFileCapture是打開一個視頻文件,實際上也可以直接打開攝像頭,反正都是視頻流,和打開視頻文件幾乎一樣,函數換成cvCreateFileCapture了而已。
#include"highgui.h"
int main(){
IplImage* img;
CvCapture* capture = cvCreateCameraCapture(0);
cvNamedWindow("攝像機", CV_WINDOW_AUTOSIZE);
while (1){
img = cvQueryFrame(capture);
if (!img){
break;
}
cvShowImage("攝像機", img);
cvWaitKey(10);
}
cvReleaseImage(&img);
cvReleaseCapture(&capture);
cvDestroyWindow("攝像機");
return(0);
}
結果: