-2

嘿偷看我在这里尝试做的是加载视频播放它,在播放视频时捕获帧并将其输出到新窗口中。这就是下面的代码在 atm 中所做的。

但是我现在想通过向捕获的帧添加模糊和阈值来将其提升到一个新的水平,它可能会在阈值之前或之后平滑边缘。

#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" );
}
4

1 回答 1

1

函数 cvQueryFrame 从相机或视频文件中抓取一帧,解压缩并返回。这个函数只是 cvGrabFrame 和 cvRetrieveFrame 在一次调用中的组合。返回的图像不应由用户发布或修改。

因此,首先您要将帧复制到内存中您可以控制的位置。

IplImage* img;
cvCopyImage(frame,img);

cvSmooth(img,img,...);
cvThreshold(img,img,...);

...
cvReleseImage(&img);

cvSmooth 是模糊的。我不确定您在平滑和模糊之间看到什么区别。查看 OpenCV C 参考以了解您可以执行的其他图像操作。

于 2013-01-18T19:38:29.233 回答