OpenCV:如何将CV_8UC1 mat转换为CV_8UC3

时间:2013-01-30 14:24:39

标签: opencv

如何使用OpenCV将CV_8UC1 Mat转换为CV_8UC3?

Mat dst;
Mat src(height, width, CV_8UC1, (unsigned char*) captureClient->data());
src.convertTo(dst, CV_8UC3);

但是dst.channels()= 1

3 个答案:

答案 0 :(得分:24)

我发现最好的方法是:

cvtColor(src,dst,CV_GRAY2RGB);

图像看起来与灰度CV_8UC1相同,但它将是CV_8UC3类型的3通道图像。

答案 1 :(得分:2)

惯例是,对于类型CV_8UC3,像素值的范围从0255,而CV_32FC3的类型值从0.0到{ {1}}。因此,您需要使用1.0的缩放系数,而不是255.0

1.0

答案 2 :(得分:1)

来自convertTo上的documentation

  
    

void Mat :: convertTo(Mat& m,int rtype,double alpha = 1,double beta = 0)const

         

rtype - 所需的目标矩阵类型,或者更确切地说,深度(因为通道的数量与源代码相同)。如果rtype为负数,则目标矩阵将与源类型相同。

  

您想为要创建的3个通道中的每个通道创建一个矩阵,然后使用合并功能。查看this问题

的答案