gpt4 book ai didi

c++ - 拍摄第一张网络摄像头照片后,OpenCV 不保存第二张网络摄像头照片

转载 作者:太空宇宙 更新时间:2023-11-03 22:31:15 24 4
gpt4 key购买 nike

我正在尝试使用网络摄像头快速连续拍摄两张照片。这是我为此编写的代码:

#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <iostream>
#include <Windows.h>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
Mat frame;
VideoCapture cap(0);

if (!cap.isOpened()) cout << "it ain't open.\n";

cap.set(CV_CAP_PROP_FRAME_WIDTH, 300);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 300);
namedWindow("1", CV_WINDOW_AUTOSIZE);

printf("before\n");
cout << "read 1 status: " << cap.read(frame) << endl;
imshow("1", frame);
while (1){
if (waitKey(27) >= 0){
destroyAllWindows();
break;
}
}

printf("after 1\n");

Mat frame2;
namedWindow("2", CV_WINDOW_AUTOSIZE);
cout << "read 2 status: " << cap.read(frame2) << endl;
imshow("2", frame2);
while (1){
if (waitKey(27) >= 0){
destroyAllWindows();
break;
}
}

printf("after 2\n");

getchar();

return 0;
}

这可以毫无问题地拍摄第一张照片:

first picture taken

...但是第二张图片,将相机向左移动很远之后,仍然是第一张图片:

what should be the second picture

这是两张照片拍摄后的打印输出,这似乎表明 read() 工作正常:

before
read 1 status: 1
after 1
read 2 status: 1
after 2

知道我错过了什么吗?

编辑:Marol 提供了这个问题的答案。捕获第二帧时,我拍了两张照片,将它们保存到同一个 Mat 中:

Mat frame2;
namedWindow("2", CV_WINDOW_AUTOSIZE);
cout << "read 2 status: " << cap.read(frame2) << endl;
cout << "read 3 status: " << cap.read(frame2) << endl;
imshow("2", frame2);

这次的图片明显不同

最佳答案

它确实返回了两张不同的图片。尝试在拍摄第一张照片时快速移动。您可以看到 frame1 与 frame 2 不同,尽管实际上 frame2 来自您预期的不同时间。对于我的简单网络摄像头,它确实在一个时间点缓冲了两帧(我的意思是一帧和第一帧之后的第二帧)。

解决方案是丢弃偶数帧(第二、第四等),只考虑奇数帧(第一、第三等)。

关于c++ - 拍摄第一张网络摄像头照片后,OpenCV 不保存第二张网络摄像头照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23915402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com