c++ 代码实现将yolov8预测出来的mask图 变回到输入图片的大小640,并且渲染在原图上
时间: 2024-03-27 21:38:21 浏览: 90
假设你已经成功地使用 YOLOv8 模型预测出了 mask 图像,并且可以将这个图像保存为一个 cv::Mat 对象。下面是一个简单的 C++ 代码示例,可以将 mask 图像变回到输入图片的大小 640,并且渲染在原图上:
```c++
#include <opencv2/opencv.hpp>
cv::Mat resizeMask(cv::Mat mask, cv::Size originalSize) {
cv::Mat resizedMask(originalSize, CV_8UC1, cv::Scalar(0));
cv::resize(mask, resizedMask, originalSize);
return resizedMask;
}
cv::Mat renderMask(cv::Mat mask, cv::Mat originalImage) {
cv::Mat renderedImage(originalImage.size(), originalImage.type(), cv::Scalar(0, 0, 0));
cv::Mat grayMask(originalImage.size(), CV_8UC1, cv::Scalar(0));
cv::cvtColor(mask, grayMask, cv::COLOR_GRAY2BGR);
cv::addWeighted(originalImage, 1, grayMask, 0.5, 0, renderedImage);
return renderedImage;
}
int main() {
// Load the original image
cv::Mat originalImage = cv::imread("input.jpg");
// Load the predicted mask image
cv::Mat mask = cv::imread("mask.jpg", cv::IMREAD_GRAYSCALE);
// Resize the mask to match the original image size
cv::Mat resizedMask = resizeMask(mask, originalImage.size());
// Render the mask on the original image
cv::Mat renderedImage = renderMask(resizedMask, originalImage);
// Display the result
cv::imshow("Rendered Image", renderedImage);
cv::waitKey(0);
return 0;
}
```
在这个示例中,我们定义了两个函数 `resizeMask()` 和 `renderMask()`,分别用于将 mask 图像变回到输入图片的大小和渲染 mask 图像在原图上。`resizeMask()` 函数使用 OpenCV 的 `resize()` 函数将 mask 图像变回到输入图片的大小,`renderMask()` 函数将变回大小的 mask 图像渲染在原图上,使用 OpenCV 的 `cvtColor()` 函数将灰度图像转换为彩色图像,并使用 `addWeighted()` 函数将原图和 mask 图像按比例混合在一起。
在主函数中,我们首先加载原始图像和预测的 mask 图像。然后,我们调用 `resizeMask()` 函数将 mask 图像变回到输入图片的大小,调用 `renderMask()` 函数将 mask 图像渲染在原图上。最后,我们显示渲染的图像,并等待用户按下任意键退出程序。
阅读全文