【发布时间】:2010-09-01 00:16:57
【问题描述】:
我正在使用 openCV C++
我需要将单通道图像转换为 3 通道图像。所以我可以使用这个:cvCvtColor(result,gray,CV_BGR2GRAY);
我不能这样做,因为结果 img 是单通道图像。有什么想法吗?
【问题讨论】:
我正在使用 openCV C++
我需要将单通道图像转换为 3 通道图像。所以我可以使用这个:cvCvtColor(result,gray,CV_BGR2GRAY);
我不能这样做,因为结果 img 是单通道图像。有什么想法吗?
【问题讨论】:
您应该使用CV_GRAY2BGR 而不是CV_BGR2GRAY。
【讨论】:
我在 OpenCV 参考书中查看了 cvtColor,发现了这个:
C++:void cvtColor(InputArray src, OutputArray dst, int code, int dstCn =0)
dstCn – 目标图像中的通道数。如果参数为0,则通道数由src和code自动推导出来。
我用过
cvtColor(src,gray,CV_BGR2GRAY,1);
将 3 通道的 Mat 转换为 1 通道,并且成功了。因此将 dstCn 更改为 3 可能对您有用:)
【讨论】:
试试这个:
CvSize dim = cvSize(int width, int height);
IplImage* dst = cvCreateImage( dim, 8, 3 );
IplImage* gray = cvCreateImage(dim, 8, 1);
// Load the gray scale image
cvMerge(gray , NULL, NULL, NULL, dst);
cvShowImage("gray",gray);
cvShowImage("dst",dst);
cvWaitKey(0);
dst 和 gray 的数据类型必须相同。您不能简单地将浮点数合并到 uint 矩阵中。为此,您必须使用 cvScale。
【讨论】:
尝试将 gray,gray,gray 合并为 BGR。
【讨论】:
cvMerge(grey, grey, grey, NULL, final); 不工作。
您可以创建一个相同通道的向量,然后将它们合并,如下所示:
std::vector<cv::Mat> copies{mat,mat,mat};
cv::merge(copies,mat);
【讨论】:
恕我直言:
如果输入是灰色的,那么输出将是灰色的。你能得到的最好的是基于像素数据的彩色分布式图像,比如(110, 110, 110) 的像素数据110,而不是真正的彩色图像
【讨论】: