C++ 将单通道图像转换为3通道图像C++;/OpenCV

C++ 将单通道图像转换为3通道图像C++;/OpenCV,c++,opencv,C++,Opencv,我正在使用opencvc++ Im需要将单通道图像转换为3通道图像。所以我可以使用:cvtcolor(result,gray,CV_bgr2; gray) 我不能这样做,因为结果img是一个单通道图像。有什么想法吗?你应该使用CV\u GRAY2BGR而不是CV\u bgr2 gray尝试将灰色、灰色、灰色合并到BGR中。尝试以下方法: CvSize dim = cvSize(int width, int height); IplImage* dst = cvCreateImage( dim,

我正在使用opencvc++

Im需要将单通道图像转换为3通道图像。所以我可以使用:
cvtcolor(result,gray,CV_bgr2; gray)


我不能这样做,因为结果img是一个单通道图像。有什么想法吗?

你应该使用
CV\u GRAY2BGR
而不是
CV\u bgr2 gray

尝试将灰色、灰色、灰色合并到BGR中。

尝试以下方法:

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来实现这一点。

我在OpenCV参考书中查看了cvtColor,发现:

C++:voidcvtColor(输入数组src,输出数组dst,int代码,intdstCn=0)

dstCn–目标图像中的频道数。如果参数为0,则通道数将自动从src和代码中导出

我用过

cvtColor(src,gray,CV_BGR2GRAY,1);
将3通道Mat转换为1通道,效果良好。因此,将dstCn更改为3可能对您有用:)

IMHO:
若输入为灰色,则输出为灰色。最好是基于像素数据的彩色分布式图像,例如
(110,110,110)
对于
110
的像素数据,而不是真正的彩色图像

您可以创建同一通道的向量,然后将其合并,如下所示:

std::vector<cv::Mat> copies{mat,mat,mat};  
cv::merge(copies,mat);
std::向量拷贝{mat,mat,mat};
cv::合并(副本、mat);

这给了我同样的错误:CVTColor中的通道数不正确(此转换代码的通道数不正确)。您还必须更改前两个参数的顺序:cvCvtColor(gray,result,CV_GRAY2BGR)。仔细阅读文档:作废CVTColor(const-CvArr*src,CvArr*dst,int-code);我不知道怎么做<代码>cvMerge(灰色、灰色、灰色、空、最终)不工作。@rptwsthi:这里不使用cvMerge函数。尝试一些矩阵操作。关键是要将两个相同的矩阵复制到原始的灰色矩阵上,并像存储3个通道一样存储它们。请注意IplImage,它现在已被弃用。