如题,对于多分类的输出结果想要可视化出来的话,需要覆盖在原图上,具体的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()函数来在原图上叠加图像就行。