15

如何使用 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

4

3 回答 3

32

我发现最好的方法是:

cvtColor(src, dst, COLOR_GRAY2RGB);

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

于 2013-01-30T18:17:41.993 回答
3

约定是,对于 type CV_8UC3,像素值范围从0to 255,对于 typeCV_32FC30.0to 1.0。因此,您需要使用255.0, 而不是 的比例因子1.0

Mat::convertTo(newImage, CV_32FC1, 255.0);
于 2013-06-13T10:34:56.313 回答
3

来自convertTo的文档

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

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

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

于 2013-01-30T16:33:36.650 回答