OpenCV中Mat 與 imshow

一 imshow函數說明

1.imshow可以直接顯示8位無符號整型圖像,像素值範圍位(0,255)。

2.imshow也是可以直接正常顯示浮點型圖像(32位或64位)的,當inshow函數遇到浮點型圖像時,像素值將乘以255。也就是說,值範圍[0,1]被映射到[0,255],然後就能正常顯示了(這個過程是內部自動完成的)。前提是浮點型圖像(即像素值範圍爲(0,1)),而不是隨意取值範圍浮點型矩陣。

3.如果你計算得到一個矩陣,想讓其顯示爲圖像,若是8位無符號整型,像素值要在(0,255)區間內,如若不是需要進行範圍歸一化爲(0,255)。若是浮點型的不在(0,1)範圍,則要歸一化範圍爲(0,1),或者直接轉爲8位無符號整型(如:用normalize函數歸一 化爲 0,255)範圍後,再用convertScaleAbs函數將歸一化後的圖線性變換成8位無符號整型)。

二 CV_32FC1類型圖像顯示實例

Mat A= Mat::zeros(m,n, CV_32FC1);//輸入

for (int i= 0; i < m; ++i) //訪問 
{
     for (int j = 0; j < n; ++j)   
    {
         A.at<float>(i,j) = 123.333;//賦值 
     }  
}  
normalize(A,A,1.0,0.0,NORM_MINMAX);//歸一到0~1之間
imshow("A", A);//顯示  

二 CV_8UC1 /CV_8UC3類型圖像的訪問

//0<=pixelY<750 ;    0<=pixelX<500

Mat map0(Mat::zeros(750, 500, CV_8UC1));
map0.ptr<char>(pixelY)[pixelX] = 254; //單通道圖像不能用data[offset]的方式訪問;
imshow("map0",map0);

int offset=pixelX*3+pixelY*map0.step; 
Mat map1(Mat::zeros(750, 500, CV_8UC3));
map1.data[offset+0]=250;
map1.data[offset+1]=250;
map1.data[offset+2]=250;
imshow("map1",map1);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章