не может получить доступ к интенсивности пикселей в изображении с помощью cimg (возвращает 0) - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь получить доступ к значениям пикселей Cimg, чтобы распечатать интенсивность пикселей, на которой находится моя мышь, а также вычислить гистограмму. Однако я получил все нули от объекта Cimg.

Изображение cimg инициируется из буфера памяти и представляет собой 12-битное серое изображение, но дополняется до 16-битного для сохранения в памяти. Код ниже определен в функции, которая вызывается несколько раз. Я хочу обновить изображения на текущем дисплее, а не создавать новое при каждом вызове функции. Таким образом, Cimgdisp определен вне функции.

#include "include\CImg.h"
int main(){
    CImg <unsigned short> image(width,height,1,1);
    CImgDisplay           disp(image);
//showImg() get called multiple times here

}

void showImg(){
    unsigned short* imgPtr = (unsigned short*) (getImagePtr());
    CImg <unsigned short> img(imgPtr,width,height);

    img*=(65535/4095);//Renormalise from 12 bit input to 16bit for better display

    //Display 
    disp->render(img);
    disp->paint();
    img*=(4095/65535);//Normalise back to get corect intensities

    CImg <float> hist(img.histogram(100));
    hist.display_graph(0,3);

    //find mouse position and disp intensity
    mouseX = disp->mouse_x()*width/disp->width();//Rescale the position of the mouse to true position of the image
    mouseY = disp->mouse_y()*height/disp->height();
    if (mouseX>0&mouseY>0){
        PxIntensity = img(mouseX,mouseY,0,0);}
    else {
        PxIntensity = -1;}
}

Все интенсивности, которые я извлекаю, равны нулю, а гистограмма также равна нулю.

Ответы [ 2 ]

2 голосов
/ 15 апреля 2019

img*=(4095/65535);//Normalise back to get corect intensities неверно, как (4095/65535)=0 в C / C ++ (деление целого числа на большее).

Может быть img*=(4095/65535.);?

1 голос
/ 15 апреля 2019

Если вы просто хотите масштабировать между 12-битными и 16-битными и обратно, лучше использовать битовые сдвиги.

img<<=4;//Renormalise from 12 bit input to 16bit for better display

//Display 
disp->render(img);
disp->paint();
img>>=4;//Normalise back to get corect intensities
...