嘿偷看我在这里尝试做的是加载视频播放,播放视频时捕获帧并在新窗口中输出。这就是下面的代码所做的事。
但我现在想通过向捕获的帧添加模糊和阈值来将其提升到新的水平,它可能会在阈值之前或之后平滑边缘。
#include<opencv\cv.h>
#include<opencv\highgui.h>
#include<opencv\ml.h>
#include<opencv\cxcore.h>
#include<fstream>
int main( int argc, char** argv ) {
//Main Window
cvNamedWindow( "DisplayVideo", CV_WINDOW_AUTOSIZE );
CvCapture* capture = cvCreateFileCapture( argv[1] ); //Video captured and stored in CAPTURE
IplImage* frame; //Image captured and stored in FRAME
int num=0;
char s [20];
while(1) {
num++;
frame = cvQueryFrame(capture);
if( !frame ) break;
cvShowImage( "DisplayVideo", frame );
char c = cvWaitKey(33);
if( c == 27 ) break;
if (c == 'f')
{
sprintf(s,"frame%d.jpg",num);
cvSaveImage(s,frame);
cvNamedWindow("FrameWindow", 0);
cvShowImage("FrameWindow",frame);
}
}
cvReleaseCapture( &capture );
cvDestroyWindow("DisplayVideo" );
}
答案 0 :(得分:1)
函数cvQueryFrame从相机或视频文件中抓取一个帧, 解压缩并返回它。这个功能只是一个组合 一次调用中的cvGrabFrame和cvRetrieveFrame。返回的图像应该 不得由用户发布或修改。
首先,您要将帧复制到您可以控制的内存中。
IplImage* img;
cvCopyImage(frame,img);
cvSmooth(img,img,...);
cvThreshold(img,img,...);
...
cvReleseImage(&img);
cvSmooth IS模糊。我不确定你在平滑和模糊之间看到了什么区别。查看OpenCV C参考,了解您可以执行的其他图像操作。