objective-c - objective-c 方法中的IplImage *

标签 objective-c opencv

我想在openCV中对视频帧进行帧比较。
假设视频文件中的第10帧和第100帧。
如果在主视频捕获循环中执行此操作,它将起作用。但是现在我想将其移动到专用方法(将IplImages作为输入)。

 // MAIN CAPTURE LOOP
 while(1) {

        cvSetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES, 10);
        frame = cvQueryFrame(capture);
        if (!frame) break;
        cvShowImage("Window_1", frame);

        cvSetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES, 100);
        nextFrame = cvQueryFrame(capture);
        if (!nextFrame) break;

        cvShowImage("Window_2", nextFrame);  // THIS SHOWS ME TWO DIFFERENT FRAMES

        // PASS THE IMAGES TO THE NEW METHOD

        [self compareFrame: frame withFrame: nextFrame]);                       

        char c = cvWaitKey(5);  
        if(c==27) {
            NSLog(@"ESC pressed!");
            break;
        }

这是我的方法(简体)
- (int) compareFrame: (IplImage*) firstFrame withFrame: (IplImage*) secondFrame
{

// THIS SHOWS ME ONLY THE firstFrame IN BOTH      
// WINDOWS?

cvShowImage("Window_1", firstFrame);
cvShowImage("Window_2", secondFrame); 

return 1;

}

为什么会这样?

最佳答案

这是因为您不拥有cvQueryFrame的结果,而cvCapture结构却拥有。如果要对结果进行处理,则必须首先进行复制。之所以看到两个不同的帧,是因为cvShowImage在显示它之前先进行了自己的复制。到达调用[self compareFrame]的位置后,frame和nextFrame指向相同的数据。

尝试以下方法:

while (1) {
    cvSetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES, 10);
    frame =cvQueryFrame(capture);
    if (!frame) {
        NSLog(@"Couldn't read frame 10");
        break;
    };

    frame = cvCloneImage(frame); //Make a copy of the frame     

    cvSetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES, 100);
    nextFrame = cvQueryFrame(capture);
    if (!nextFrame) {
        NSLog(@"Couldn't read frame 100");
        break;
    };

    nextFrame = cvCloneImage(nextFrame); //Make a copy of the frame

    // PASS THE IMAGES TO THE NEW METHOD
    [self compareFrame: frame withFrame: nextFrame];
    char c = cvWaitKey();

    cvReleaseImage(&frame);
    cvReleaseImage(&nextFrame);
    if(c==27) {
        NSLog(@"ESC pressed!");
        break;
    }
}

关于objective-c - objective-c 方法中的IplImage *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14076327/

相关文章:

python - OpenCV分解投影矩阵欧拉角方向错误?

ios - 使用 Setter 和 Getter 方法与直接操作相比的好处

objective-c - 属性列表未复制到文档目录中

objective-c - 自动滚动到 NSTextView 的末尾

python - 如何让openCV保存它对视频所做的更改

c# - 使用 EmguCV 进行全景图像拼接

iphone - 如何获得警报信息?

ios - 发送空格和点时 Json 崩溃

python - 在 ubuntu 中为 python 和 c++ 集成 opencv 3.0.0 并使用 cmake 构建库

php - 调用未定义函数 dl() php