【C++】【Opencv】多分类语义分割结果覆盖在原图上

3 篇文章 0 订阅
1 篇文章 0 订阅

如题,对于多分类的输出结果想要可视化出来的话,需要覆盖在原图上,具体的C++代码实现如下:

	//image为原图
	cv::Mat image = cv::imread("your_img_path",1);
	int height_ori = image.rows;
	int width_ori = image.cols;
	std::string save_result_path = "your_path\\";
	std::string name = "your_name";
	int num_classes = 3;//分类类别个数
	for (int k = 0; k < num_classes; k++)
	{
		int integer_number = k / 3;
		cv::Mat ImageResult = cv::Mat(height_ori, width_ori, CV_8UC1);
		memcpy(ImageResult.data, result+ k*height_ori* width_ori, height_ori * width_ori * sizeof(unsigned char));//result是分割结果的unsigned char*
		cv::cvtColor(ImageResult, ImageResult, CV_GRAY2BGR);//先将分割结果转为3通道
		for (int h = 0; h < height_ori; h++)
		{
			for (int w = 0; w < width_ori; w++)
			{				
				ImageResult.at<Vec3b>(h, w)[k%3] /= (integer_number + 1);
				ImageResult.at<Vec3b>(h, w)[((k % 3) + 1) % 3] /= 255;
				ImageResult.at<Vec3b>(h, w)[((k % 3) + 1) % 3] *=(255 - 255 / (integer_number + 1));
				ImageResult.at<Vec3b>(h, w)[((k % 3) + 2) % 3] = 0;
			}
		}
		addWeighted(image, 1, ImageResult, 0.2, 0, image, -1);
		//cv::imwrite(save_result_path+ name+"_result_cls_"+to_string(k)+".jpg", ImageResult);
	}
	cv::imwrite(save_result_path + name + "_result.jpg", image);

假如说本人有9分类的话,而且每个分类结果图最大像素值是255,则输出的9张结果图的像素最大值分别是
第1张:(255,0,0);
第2张:(0,255,0);
第3张:(0,0,255);
第4张:(127,128,0);
第5张:(0,127,128);
第6张:(128,0,127);
第7张:(85,170,0);
第8张:(0,85,170);
第9张:(170,0,85);

然后在循环里面不断使用addweighted()函数来在原图上叠加图像就行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值