C++ 从OpenCV中的Mat对象生成图像

C++ 从OpenCV中的Mat对象生成图像,c++,opencv,mat,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的值=蓝色,依此类推 然后构造并显示此照片 有人知道我该怎么做吗 谢谢 有,但如果您的数据仅在[0..25]范围内,它们将不会有帮助

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

Mat g;
g=[1,5,2,14,13,5,22,24,5,13....;
21,12,...;
..
.];
我想将这些值表示为一个图像。它只是一个显示不同区域的插图图像,每个区域都有一种颜色。 例如:所有等于1的值=红色,所有等于14的值=蓝色,依此类推

然后构造并显示此照片

有人知道我该怎么做吗

谢谢

有,但如果您的数据仅在[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 
       }
   }
Vec3b lut[26]={
Vec3b(0,0255),,
Vec3b(13255,11),
Vec3b(255,22,1),
//一路下来,你都明白了,不是吗?
};
垫子颜色(w、h、CV_8UC3);
对于(int y=0;y有,但是如果您的数据仅在[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 
       }
   }
Vec3b lut[26]={
Vec3b(0,0255),,
Vec3b(13255,11),
Vec3b(255,22,1),
//一路下来,你都明白了,不是吗?
};
垫子颜色(w、h、CV_8UC3);

对于(int y=0;y如果您不太在意得到的颜色,可以缩放数据(使其几乎填满0到255范围),然后使用内置的颜色贴图。 e、 g


查看

如果您不太在意得到的颜色,您可以缩放数据(使其几乎填满0到255范围),然后使用内置的颜色贴图。 e、 g


查看

@berak.。非常感谢这段代码工作得非常完美。虽然我必须使用合适的像素值手动选择“lut”的元素值,但只要它工作正常就可以。当我尝试使用彩色贴图时,我有一个黑色图像,我不知道为什么。可能是因为垫子的类型或其他原因,但我使用它没有问题e无论如何,换一种方式。再次感谢:)@berak..非常感谢这段代码工作得非常完美。虽然我必须使用合适的像素值手动选择“lut”的元素值,但只要它工作正常就可以了。当我尝试使用彩色贴图时,我有一个黑色图像,我不知道为什么。可能是因为垫子的类型或其他原因,但没有问题,我使用了其他方式方式。再次感谢:)我试过了,但当我尝试使用彩色贴图时,我得到了一张黑色图像,我不知道为什么。。无论如何谢谢:)@triple13彩虹彩色贴图甚至不包含黑色,所以你做了一些非常错误的事。是的,我知道。我认为问题在于我的垫子的类型,因为如果我使用
imread
加载一张普通图像,然后应用彩色贴图,效果很好。我尝试过,但当我尝试使用彩色贴图时,我得到了一张黑色图像,我不知道为什么。。无论如何,谢谢:)@triple13彩虹彩色贴图甚至不包含黑色,所以你做了一些非常错误的事情。是的,我知道。我认为问题在于垫子的类型,因为如果我使用
imread
加载普通图像,然后应用彩色贴图,效果会很好