用c++代码实现:yolov5 分割出来的opencv mask变回原图大小
时间: 2024-03-13 14:42:47 浏览: 142
假设你已经得到了一张原图和对应的mask图,且mask图已经被缩放到了一个小的尺寸。接下来,你需要将mask图恢复到原图的大小。以下是用C++代码实现的方法:
```c++
cv::Mat restore_mask(cv::Mat& orig_img, cv::Mat& mask_img) {
// 获取原图和mask图的尺寸
int orig_h = orig_img.rows;
int orig_w = orig_img.cols;
int mask_h = mask_img.rows;
int mask_w = mask_img.cols;
// 计算原图和mask图的缩放比例
float scale_h = (float)orig_h / mask_h;
float scale_w = (float)orig_w / mask_w;
// 将mask图缩放回原图大小
cv::Mat resized_mask;
cv::resize(mask_img, resized_mask, cv::Size(orig_w, orig_h));
// 将mask图转换为二值图像
cv::Mat binary_mask;
cv::threshold(resized_mask, binary_mask, 0.5, 255, cv::THRESH_BINARY);
// 将二值图像转换为三通道图像
cv::Mat mask_3c;
cv::cvtColor(binary_mask, mask_3c, cv::COLOR_GRAY2BGR);
// 将mask图合并到原图中
cv::Mat result;
cv::bitwise_and(orig_img, mask_3c, result);
return result;
}
```
上述代码首先计算原图和mask图的缩放比例,然后将mask图缩放回原图大小。接着,将mask图转换为二值图像,并将其转换为三通道图像,最后将mask图合并到原图中。返回的结果就是恢复后的原图。
阅读全文