Я пишу код на C ++ для отображения изображений, полученных с камеры. В этом коде функция обратного вызова будет вызываться камерой каждый раз, когда поступает новое изображение, и я получу указатель в памяти, где хранится изображение. Теперь я хочу использовать CImg для отображения изображения каждый раз, когда оно проходит (например, видео), и, возможно, использовать функции в CImg для управления изображением.
Я думал об определении экземпляра Cimg из указателя в функции обратного вызова и отправке указателя отображения CImg в функцию обратного вызова. Поэтому каждый раз, когда вызывается функция обратного вызова, экземпляр перезаписывается, а затем отображается новое изображение.
struct data {
CImgDisplay* disp;
};
int callBack(int Nimg, data *pointersPassedIn){
auto disp = pointersPassedIn->disp;
int width,height;
getParameter(WIDTH, &width);//Retrieve height and width of the image from camera
getParameter(HEIGHT, &height);
unsigned short* imgPtr = (unsigned short*)getImagePtr(Nimg);//Retrieve image pointer from camera, as 16-bit image, use unsigned short
CImg <unsigned short> img(imgPtr ,width,height);
disp->render(img);
disp->paint();
return 0 ;
};
int main(){
int width,height;
getParameter(WIDTH, &width);
getParameter(HEIGHT, &height);
CImgDisplay disp(width,height);
registerCallBack(&disp);//will add &disp to struct data and send it to call back function
aquire();
while (!disp.is_closed()){
;
}
stopAquire();
};
Однако отображается только одно изображение, после чего программа сама закрывается.
Спасибо