我已经有这个问题很长一段时间了,我不知道最近会发生什么。
所以我有一个调用nextFrame
的循环,现在问题在于imshow
实际显示的内容。
每次拨打cap.grab()
和cap.retrieve()
时,我特别想要一张图片,但似乎在#34; 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对象本身。
答案 0 :(得分:0)
缓慢而作弊的修复可能是
cap.open( *CAMERA_NUM* );
在循环中,这很慢,但它实现了没有缓冲区的静止图像。