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

Har*_*rry 11 c++ opencv

我使用openCV C++

我需要将单通道图像转换为3通道图像.所以我可以用这个:cvCvtColor(result,gray,CV_BGR2GRAY);

我不能这样做因为结果img是单通道图像.有任何想法吗?

Vad*_*der 15

你应该使用CV_GRAY2BGR而不是CV_BGR2GRAY.

  • 您还必须更改前两个参数的顺序:cvCvtColor(gray,result,CV_GRAY2BGR).仔细阅读文档:void cvCvtColor(const CvArr*src,CvArr*dst,int code); (6认同)

小智 7

试试这个:

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);
Run Code Online (Sandbox Code Playgroud)

dst和gray都必须具有相同的数据类型.你不能简单地在一个uint矩阵中合并一个浮点数.你必须使用cvScale.


thu*_*ick 7

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

C++:void cvtColor(InputArray src,OutputArray dst,int code,int dstCn = 0)

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

我用过

cvtColor(src,gray,CV_BGR2GRAY,1);
Run Code Online (Sandbox Code Playgroud)

将3通道Mat转换为1通道,它起作用了.所以将dstCn更改为3可能对你有用 :)