Обновление изображений Cimg и отображение из функций обратного вызова - PullRequest
3 голосов
/ 03 апреля 2019

Я пишу код на 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();
};

Однако отображается только одно изображение, после чего программа сама закрывается.

Спасибо

...