cv2保存图片&将mask覆盖在原图上

cv2保存图片

cv2 保存图片 cv2保存图片默认通道 BGR,无归一化:

img = mask_a[0].clone().detach().double().to(torch.device('cpu'))
img = np.ascontiguousarray(img.numpy().transpose((1,2,0)))
cv2.imwrite(f"mask.jpg", img)

若图片数据为RGB格式,则需要将其转化为BGR格式进行保存:

img = origanImage.clone().detach().double().to(torch.device('cpu'))
img = np.ascontiguousarray(img.numpy().transpose((1,2,0)))*255
img = cv2.cvtColor(img.astype(np.uint8), cv2.COLOR_RGB2BGR)
cv2.imwrite(f"img.jpg", img)

由于 torchvision 中 transform.ToTensor() 函数默认会进行归一化操作,因此*255

将mask添加在img上

img = images_a[0].clone().detach().double().to(torch.device('cpu'))
img = np.ascontiguousarray(img.numpy().transpose((1,2,0)))*255
img = cv2.cvtColor(img.astype(np.uint8), cv2.COLOR_BGR2RGB)

mask = mask_a[0].clone().detach().double().to(torch.device('cpu'))
mask = np.ascontiguousarray(mask.numpy())
# BGR
color = (0, 0, 1.0)
for c in range(3):
img[:, :, c] = np.where(mask == 1, img[:, :, c] * (1 - 0.5) + 0.5*color[c]* 255, img[:, :, c])
cv2.imwrite('1.jpg', img)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设你已经成功地使用 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 图像渲染在原图上。最后,我们显示渲染的图像,并等待用户按下任意键退出程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值