Я пытаюсь получить доступ к значениям пикселей 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;}
}
Все интенсивности, которые я получаю, равны нулю, и гистограмма также равна нулю.
img*=(4095/65535);//Normalise back to get corect intensities
неверно, как (4095/65535)=0
в C/C++ (деление целого числа на большее).
Может img*=(4095/65535.);
?
Если вы просто хотите масштабироваться между 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
Похоже, вы не загрузили изображение. Кроме того, убедитесь, что ваш код Минимальный полный и проверяемый в соответствии с правилами переполнения стека. Это означает, что там должны быть утверждения
#include
, а также что ничего постороннего, например, установка заголовка, там быть не должно.