1.对二值图做处理,先将其转换成RGB图
Mat mask = imread("F:/二值图.png", IMREAD_ANYDEPTH); //读取二值图,只有0,1像素
//mask.setTo(255, mask == 1); //uint8格式显示0和1像素都是黑色的,为了能看出来二值模板,需要将像素1换成255
//imshow("原始二值图", mask);
//waitKey(6000);
cvtColor(mask, mask, COLOR_GRAY2BGR);//先将二值图转成RGB图,此时二值图中的1像素值就变成了[1,1,1]
for (int i = 0; i < mask.rows; i++)//将RGB图中的[1,1,1]像素改成我们想要的彩色像素
{
for (int j = 0; j < mask.cols; j++)
{
Vec3b& pixel = mask.at<Vec3b>(i, j);//按照坐标,获取RGB图对应的像素值
if (pixel[0] == 1) //找到像素值为1的值,将其转换成别的颜色
{
pixel[0] = 0; //Blue //可以自己设置RGB值
pixel[1] = 128; //Green
pixel[2] = 255; //Red
}
}
}
※ 如何设置想要的颜色?推荐一个方法
(1)在windows附件中打开画图工具,找到编辑颜色选项,打开编辑界面。
(2)选择颜色,就会在右下角显示对应的RGB值,照着这个数输入到代码中就可以了。
2.读取灰度图
Mat img = imread("F:/灰度图.png", IMREAD_ANYDEPTH);
//imshow("原始灰度图", img);
//waitKey(6000);
cvtColor(img, img, COLOR_GRAY2BGR); //将灰度图转成RGB图
3.灰度图与二值图叠加,利用OpenCV的addWeighted函数
addWeighted(img, 1, mask, 0.5, 1, img);//1,0.5,1是两个图叠加的比例系数,可以自行设置
//imshow("叠加后的图",img);
//waitKey(6000);