OpenCV图像处理——copyTo与mask(掩码)操作

概述

Mat矩阵类的成员函数中copyTo()函数有两种原型,第一种是:image.copyTo(imageROI),作用是把image的内容复制粘贴到imageROI上;第二用法是:image.copyTo(imageROI,mask)。 作用是把mask和image重叠以后把mask中像素值为0的点对应的image中的同位置点变为0,而不为0的点保持不变。
第二种办法最常用的一个场景是不规则ROI提取。

不规则ROI提取

1.代码

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace std;
using namespace cv;

int main()
{
	//原图像
	Mat src = imread("src.jpg");
	//用语义分割得到的mask图像
	Mat mask = imread("mask.jpg");
	//效果图像
	Mat dst;

	src.copyTo(dst, mask);

	namedWindow("ROI", 0);
	imshow("ROI", dst);

	waitKey(0);
	return 0;
}

原图:
在这里插入图片描述

Mask图像:
在这里插入图片描述
效果图:
在这里插入图片描述

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您好!要将一个图像中的多边形复制到另一个图像,可以使用以下步骤: 1. 使用 OpenCV 读取源图像和目标图像。 ```python import cv2 src_img = cv2.imread('source_image.jpg') dst_img = cv2.imread('destination_image.jpg') ``` 2. 使用 OpenCV 的 `cv2.fillPoly()` 函数在源图像中绘制多边形。 ```python import numpy as np # 定义多边形顶点坐标 pts = np.array([[100, 100], [200, 50], [300, 150], [200, 200]], np.int32) # 在源图像中绘制多边形 cv2.fillPoly(src_img, [pts], (255, 255, 255)) ``` 3. 使用 OpenCV 的 `cv2.bitwise_and()` 函数将源图像中的多边形与目标图像进行逐像素的“与”操作,得到重叠区域。 ```python # 将源图像中的多边形与目标图像进行“与”操作 mask = cv2.bitwise_and(src_img, dst_img) ``` 4. 使用 OpenCV 的 `cv2.addWeighted()` 函数将重叠区域叠加到目标图像上。 ```python # 将重叠区域叠加到目标图像上 result = cv2.addWeighted(mask, 1, dst_img, 1, 0) ``` 完整代码如下: ```python import cv2 import numpy as np # 读取源图像和目标图像 src_img = cv2.imread('source_image.jpg') dst_img = cv2.imread('destination_image.jpg') # 定义多边形顶点坐标 pts = np.array([[100, 100], [200, 50], [300, 150], [200, 200]], np.int32) # 在源图像中绘制多边形 cv2.fillPoly(src_img, [pts], (255, 255, 255)) # 将源图像中的多边形与目标图像进行“与”操作 mask = cv2.bitwise_and(src_img, dst_img) # 将重叠区域叠加到目标图像上 result = cv2.addWeighted(mask, 1, dst_img, 1, 0) # 显示结果 cv2.imshow('Result', result) cv2.waitKey(0) cv2.destroyAllWindows() ``` 注意:在使用 `cv2.fillPoly()` 函数绘制多边形时,需要确保多边形的顶点坐标顺序是按照顺时针或逆时针排列的,否则可能会出现意想不到的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知来者逆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值