Я использую API CL Eye Multicam C++ для получения кадров из камеры PSEye, и я нашел что-то интересное. Надеюсь, кто-то может объяснить мне такое поведение.
Следуя этому примеру, если я использую обычный код (вокруг строки 108):
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
это будет очень полезно!
Я, наконец, понял, что происходит... cvGetImageRawData()
копирует изображение pCapImage
необработанные данные pCapBuffer
и, таким образом, дает ему адрес, что делает его указать на представление внутренних данных класса изображений. Поэтому каждый раз, когда CLEyeCameraGetFrame()
называется изменением данных внутри pCapBuffer
, это те же данные внутри pCapImage
. Разработчик этого кода просто использовал функции OpenCV для инициализации буфера с нужным объемом пространства и использовал его для получения изображения кадра.