这个问题我已经有很长时间了,我不知道是怎么回事。所以我有一个循环,从那里调用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
EDIT问题是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
EDIT它可能是具有缓冲区的摄像机,而不是VideoCapture对象本身。
1条答案
按热度按时间vnjpjtjt1#
一个缓慢和欺骗的修复可能是做
在循环中,这是缓慢的,但是它在没有缓冲器的情况下实现了静止图像。