簡體   English   中英

無法使用cimg訪問圖像中的像素強度(返回0)

[英]can't access pixel intensities in image using cimg (returns 0)

我試圖訪問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是不正確的,因為C / C ++中的( (4095/65535)=0 (整數除以一個大的整數)。

也許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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM