问题:利用opencv的putText施加的scalar定义的颜色显示不对?
解答:
1、语法问题,不做解释
2、自己定义的颜色元素,在叠加到新的Mat上时,未考虑到图像的通道是否一致。
经常有同学利用putText函数定义彩色打印,然后在灰度图像上显示出来。错误示例:
sprintf(strTemp, "cap_%08d_R.raw", imageNum);
namedWindow(WINDOWSNAME, 0);
moveWindow(WINDOWSNAME, 0, 0);
resizeWindow(WINDOWSNAME, 640, 480);
putText(imageGrayMat, strTemp, Point(40, 40), FONT_HERSHEY_SIMPLEX, 1, Scalar(255, 0, 0), 3, 8);
imshow(WINDOWSNAME, imageGrayMat);
通过上述代码,无论如何修改Scalar(255, 0, 0)中的值,均无法显示出彩色图像,自己却查不出原因。
正确的方法如下,将灰度图像先转化为三通道彩色图像,然后在施加打印信息。
sprintf(strTemp, "cap_%08d_R.raw", imageNum);
namedWindow(WINDOWSNAME, 0);
moveWindow(WINDOWSNAME, 0, 0);
resizeWindow(WINDOWSNAME, 640, 480);
cvtColor(imageGrayMat, imageColorMat, COLOR_GRAY2BGR);//单通道转化为三通道图像
putText(imageColorMat, strTemp, Point(40, 40), FONT_HERSHEY_SIMPLEX, 1, Scalar(255, 0, 0), 3, 8);
imshow(WINDOWSNAME, imageColorMat);