如何使用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
答案 0 :(得分:24)
我发现最好的方法是:
cvtColor(src,dst,CV_GRAY2RGB);
图像看起来与灰度CV_8UC1相同,但它将是CV_8UC3类型的3通道图像。
答案 1 :(得分:2)
惯例是,对于类型CV_8UC3
,像素值的范围从0
到255
,而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问题
的答案