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);
发布了37 篇原创文章 · 获赞 33 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/xu_fengyu/article/details/92800217