我正在使用CL Eye Multicam C ++ API从PSEye相机中获取帧,我发现了一些有趣的东西,我希望有人可以向我解释这种行为。
如果我使用常规代码(第108行),请关注this example:
while(_running)
{
cvGetImageRawData(pCapImage, &pCapBuffer);
CLEyeCameraGetFrame(_cam, pCapBuffer);
cvShowImage(_windowName, pCapImage);
}
pCapBuffer已更新,但如果我这样做:
while(_running)
{
CLEyeCameraGetFrame(_cam, pCapBuffer);
}
pCapBuffer
remais NULL
!因此,对于我看到CLEyeCameraGetFrame()
当有人“消费”它时更新pCapBuffer
...我不知道的是CLEyeCameraGetFrame()
如何知道缓冲区被读取了?我希望每次调用pCapBuffer
时都会更新CLEyeCameraGetFrame()
....这是相机帧中的常规行为吗?
此外,如果有人可以指出我如何从QImage
pCapBuffer
中取出{{1}},那将非常有帮助!
答案 0 :(得分:0)
我终于明白发生了什么... cvGetImageRawData()
将图片pCapImage
原始数据复制到pCapBuffer
,从而为其提供一个地址,使其指向图像类内部数据表示。因此,每次调用CLEyeCameraGetFrame()
时,它都会更改pCapBuffer
内的数据,这与pCapImage
中的数据相同。这段代码的设计者只是使用OpenCV函数来初始化具有适当空间的缓冲区,并用它来获取帧图像。