在OpenCV中从Mat对象构建图像

时间:2013-09-04 08:53:13

标签: c++ opencv mat

我使用的是OpenCV,我有一个大小为1024 * 1024的Mat对象(从照片中提取并进行操作),其值在[1..25]范围内。例如:

Mat g;
g=[1,5,2,14,13,5,22,24,5,13....;
21,12,...;
..
.];

我想将这些值表示为图像。它只是一个插图图像来显示不同的区域,每个区域都有一个颜色。 例如:所有值等于1 =红色,所有值等于14 =蓝色,依此类推......

然后构建并显示这张照片。

任何人都知道我该怎么办?

谢谢!

2 个答案:

答案 0 :(得分:1)

如果你不太喜欢你得到的颜色,你可以缩放你的数据(因此它几乎填充0到255范围)然后使用内置的色彩映射。 e.g。

cv::Mat g = ...
cv::Mat image;
cv::applyColorMap(g * 10, image, COLORMAP_RAINBOW);

请参阅applyColorMap() doco

答案 1 :(得分:0)

colormaps,但如果您的数据仅在[0..25]范围内,它们将无济于事。所以你可能需要推出自己的版本:

   Vec3b lut[26] = { 
        Vec3b(0,0,255),
        Vec3b(13,255,11),
        Vec3b(255,22,1),
        // all the way down, you get the picture, no ?
   };

   Mat color(w,h,CV_8UC3);
   for ( int y=0; y<h; y++ ) {   
       for ( int x=0; x<w; x++ ) {
           color.at<Vec3b>(y,x) = lut[ g.at<uchar>(y,x) ];   
          // check the type of "g" please, i assumed CV_8UC1 here. 
          // if it's CV_32S, use g.at<int>  , i.e, you need the right type here 
       }
   }