我使用openCV C++
我需要将单通道图像转换为3通道图像.所以我可以用这个:cvCvtColor(result,gray,CV_BGR2GRAY);
我不能这样做因为结果img是单通道图像.有任何想法吗?
Vad*_*der 15
你应该使用CV_GRAY2BGR而不是CV_BGR2GRAY.
小智 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.
我在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可能对你有用 :)