对实时的视屏流进行处理,实质还是对单幅图片进行处理!
#include "stdafx.h" #include "cv.h" #include "highgui.h" int g_slider_position = 0; CvCapture * g_capture =NULL; void onTrackbarSlide(int pos){ //再拖动滚动条的时候,滚动条的位置会被作为int数字传入 cvSetCaptureProperty( g_capture, CV_CAP_PROP_POS_FRAMES, pos ); } void example4(IplImage * image){ //对图片进行平滑处理 cvNamedWindow("Example4-in"); cvNamedWindow("Example4-out"); cvShowImage("Example4-in",image); IplImage* out=cvCreateImage( //创建一个size为image,三通道8位的彩色图 cvGetSize(image), IPL_DEPTH_8U, 3 ); cvSmooth(image,out,CV_GAUSSIAN,3,3); //进行模板为3*3的平滑处理 cvShowImage("Example4-out",out); cvReleaseImage(&out); //cvWaitKey(0);这个加上的话视屏会停顿 // cvDestroyWindow("Example4-in");//这个加上的话视屏会闪,不停的申请释放窗口= =,但是删去的话内存好像也没有泄露 // cvDestroyWindow("Example4-out"); } int main(){ cvNamedWindow("Example3",CV_WINDOW_AUTOSIZE);//申请可以自动调节大小的窗口Example1 g_capture=cvCreateFileCapture("F:/film/kq.avi");//读取avi格式的影片 int frames = (int) cvGetCaptureProperty( g_capture, CV_CAP_PROP_FRAME_COUNT ); if(frames != 0){ cvCreateTrackbar( //进度条 "Position", "Example3", &g_slider_position, frames, onTrackbarSlide ); } IplImage * frame; while(1){ frame = cvQueryFrame(g_capture);//读取下一个影片帧率 if(!frame)break; cvShowImage("Example3",frame); example4(frame);//对单帧图像进行处理 char c=cvWaitKey(1); //每读取一个视频片度就停止33毫秒,并且会收集键盘的输入 if(c == 27)break;//27就是对应键盘上的ESC建,如果没有按键盘的话C为-1 } cvReleaseCapture(&g_capture); cvDestroyWindow("Example2"); return 0; }
参考:学习opencv