【python】Paste Mask

在这里插入图片描述

学习来自【OpenCv】利用roi 掩模 将一张图片添加到另一张上

任务描述:提取图片A的 mask 区域,并粘贴到图片B上

文章目录

  • 1 代码实现
  • 2 结果展示
  • 3 涉及到的库
    • cv2.bitwise_not
    • cv2.bitwise_and
    • cv2.add
  • 附录——获取 mask 的边界框

1 代码实现

A 图

请添加图片描述

A 图的 mask 标签

请添加图片描述
B 图

请添加图片描述
结果
在这里插入图片描述

下面看看代码流程

import cv2
import numpy as np
from os.path import join
from os import listdirrootpath = "/home/bryant/datasets/"img1 = cv2.imread(join(rootpath, "images", "00000.jpg"))   # A 图
img2 = cv2.imread(join(rootpath, "matting", "00000.jpg"))  # A 图 mask
img3 = cv2.imread("animal_world_70223.jpg")  # B 图h, w, c = img1.shape
img1 = cv2.resize(img1, (w//2, h//2))
img2 = cv2.resize(img2, (w//2, h//2))
img3 = cv2.resize(img3, (w//2, h//2))img2not = cv2.bitwise_not(img2)img2_gray = cv2.cvtColor(img2not, cv2.COLOR_BGR2GRAY)
ret, mat = cv2.threshold(img2_gray, 170, 255, cv2.THRESH_BINARY)
cv2.imshow("1", mat)  # 图 1 mask 黑白颠倒fg1 = cv2.bitwise_and(img3, img3, mask=mat)
cv2.imshow("2", fg1)  # 图 2,仅输出 mask 非零区域的与mat2 = cv2.bitwise_not(mat)
cv2.imshow('3', mat2) # 图 3,mask 黑白颠倒回来
fg2 = cv2.bitwise_and(img1, img1, mask=mat2)
cv2.imshow('4', fg2)  # 图 4,仅输出 mask 非零区域的与dst = cv2.add(fg1, fg2)  # 图 2 图 4 结合
cv2.imshow('dst', dst)cv2.waitKey(0)
cv2.destroyAllWindows()

2 结果展示

图 1

在这里插入图片描述
图 2
在这里插入图片描述
图 3
在这里插入图片描述
图 4
在这里插入图片描述
结果
在这里插入图片描述

3 涉及到的库

cv2.bitwise_not

在这里插入图片描述

cv2.bitwise_and

在这里插入图片描述

mask,图像掩膜,可选参数,为8位单通道的灰度图像,用于指定要更改的输出图像数组的元素,即输出图像像素只有mask对应位置元素不为0的部分才输出,否则该位置像素的所有通道分量都设置为0

cv2.add

在这里插入图片描述

附录——获取 mask 的边界框

请添加图片描述

mask = cv2.imread("mask.jpg")
gray = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY)
_, new_mask = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY)
non_zero_indices = np.nonzero(new_mask)
x_ind = non_zero_indices[1]
y_ind = non_zero_indices[0]
x_min, x_max = np.min(x_ind), np.max(x_ind)
y_min, y_max = np.min(y_ind), np.max(y_ind)
bbox = [x_min, x_max, y_min, y_max]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/636854.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【GPTs分享】GPTs分享之Image Recreate | img2img​

简介 该GPT是一个专门用于图像编辑、重建和合并的工具。它通过详细的自动图像描述和生成,帮助用户从源图像中重现或修改图像。此工具设计用于为视障用户提供图像内容的详细描述,并生成全新的图像,以满足特定的视觉需求。 主要功能 \1. 图像…

深入OceanBase内部机制:资源隔离实现的方式总结

码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 目录 1. 为何HTAP需要资源隔离2. OceanBase的资源隔离机制概述租户间资源隔离租户内资源隔离物理资源隔离大查询请求的隔离优先级…

如何批量给Word文件增加前缀序号?“汇帮批量重命名”帮助你批量给word文件增加前缀序号。

批量给Word文件增加前缀序号的过程,对于经常处理大量文档的人来说,是一项既繁琐又必要的任务。首先,我们需要明确为什么要给Word文件增加前缀序号。在很多情况下,当我们需要按照一定的顺序对多个文档进行管理和归档时,…

书生·浦语大模型实战营Day04OpenXLab 部署

书生浦语大模型实战营Day04OpenXLab 部署 如何在 OpenXLab 部署一个 InternLM2-7B chat 的应用。 OpenXLab浦源平台介绍 OpenXLab 浦源平台以开源为核心,旨在构建开源开放的人工智能生态,促进学术成果的开放共享。OpenXLab面向 AI 研究员和开发者提供…

OpenStack 常见模块详解

目录 一、OpenStack 架构 二、控制台 Dashboard 三、身份认证服务 Keystone 1)用户(user) 2)项目(project) 3)角色(role) 4)服务(serv…

iptables命令简介

正文共:3456 字 22 图,预估阅读时间:3 分钟 iptables/ip6tables命令,用于在Linux内核中设置、维护和检查IPv4和IPv6数据包过滤规则的表,从而实现IPv4/IPv6数据包过滤和NAT的管理工具。它可以定义多个不同的表&#xff…

骑砍2霸主MOD开发(6)-使用C#-Harmony修改本体游戏逻辑

一.C#-Harmony反射及动态注入 利用C#运行时环境的反射原理,实现对已加载DLL,未加载DLL中代码替换和前置后置插桩. C#依赖库下载地址:霸王•吕布 / CSharpHarmonyLib GitCodehttps://gitcode.net/qq_35829452/csharpharmonylib 根据实际运行.Net环境选择对应版本的0Harmony.dll…

ssh免秘钥登录与时钟同步

ssh免秘钥登录及数据拷贝 ssh免秘钥登录及数据拷贝环境生成秘钥拷贝公钥到到远程服务器通过ssh-copy-id命令拷贝公钥到远程服务器通过手动拷贝公钥到远程服务器 非root用户远程拷贝公钥 设置编码方式临时设置编码永久设置方法一永久设置方法二 设置时钟同步使用 ntpdate 命令使…

闲话电子设计之100条

1、BUCK芯片延时上电的方法: 1)缓启动芯片 2)SS引脚电容变更引起延时 3)RC阻容延时 电容谐振峰,受电容自身参数影响。 2、反射/EMI 源反射(Zs-Zline)/(ZsZline) 终…

Scala的函数至简原则

对于scala语言来说,函数的至简原则是它的一大特色。下面让我们一起来看看分别有什么吧! 函数至简原则:能省则省! 初始函数 def test(name:String):String{return name }1、return可以省略,Scala会使用函数体的最后一…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之二 简单人脸检测添加戴眼镜效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之二 简单人脸检测添加戴眼镜效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之二 简单人脸检测添加戴眼镜效果 一、简单介绍 二、简单人脸检测添加戴眼镜效…

react入门基础

React 简介 React ------- 用于构建用户界面的JavaScript库/一个将数据渲染为HTML视图的开源JavaScript库 React历史 【经典水时长/水字数】 由Facebook开发,且开源 起初由Facebook的软件工程师 Jordan Walke 创建 【膜拜 React 祖师爷】于2011年部署于 Facebo…