繁体   English   中英

OpenCV 视频捕获抓取和检索

[英]OpenCV Videocapture Grab and Retrieve

我已经有这个问题很长时间了,我不确定发生了什么。 所以我有一个调用 nextFrame 的循环,现在问题在于nextFrame实际显示的imshow

每次调用cap.grab()cap.retrieve()时,我都特别想要一张图像,但它似乎在“cap”对象内部有这个缓冲区,所以在获取单个瞬时图像时,我会得到一个序列/图像当我单击图像时,图像,然后在 3/4 帧后新序列。

我如何获得单帧?

cap 是一个 VideoCapture 对象,maxCount 是向量的大小。

void CamLoop::nextFrame() {
.
.
.
    //if first loop fill a vector<Mat> with random Mats from camera
    if (firstLoop) {
        Mat buff;
        cap >> buff;
        for(int i = 0; i<(maxCounter); i++) {
            buffer.push_back(buff);
        }
    }

    projector.nextCode();

    if (!customImages) {
        cap.grab();
        Mat buff;
        cap.retrieve(buff);


//tried this way too
//cap >> buff;

        buffer[counter] = buff;

        setMouseCallback( "Camera", mouseFunc, this );
        imshow("Camera", buffer[counter]);
        waitKey(1);
    }
.
.
.
counter++;
}

我在 Eclipse Mars 上使用 Linux Mint Rosa 和 OpenCV 3.1.0

编辑问题是 VideoCapture 有一个缓冲区,在您自己的计算机上以调试模式尝试这个,帧不是实时的,我将如何解决这个问题?

我尝试使用

cap.set(CV_CAP_PROP_BUFFERSIZE,1);

但它给了我这个错误。

VIDEOIO ERROR: V4L2: setting property #38 is not supported

也试过

cap.set(CV_CAP_PROP_MODE,1);

但它给了我这个错误。

VIDEOIO ERROR: V4L2: setting property #9 is not supported

编辑它可能是带有缓冲区的相机,而不是 VideoCapture 对象本身。

一个缓慢而作弊的修复可能是要做的

cap.open( *CAMERA_NUM* );

在循环中,这很慢,但它可以在没有缓冲区的情况下实现静止图像。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM