我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python如何利用ROI进行图像合成

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python如何利用ROI进行图像合成

本篇内容介绍了“Python如何利用ROI进行图像合成”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

之前使用seamlessClone来合成图片,但发现在两张图片的交集部分会出现一些小问题……

需求:

假设现在有一张图片(模板)中存在两个空格可以用来填照片(如下图所示):

Python如何利用ROI进行图像合成

图中,蓝色的圆圈和黄色的圆圈为需要替换的内容,其余部分可以视为一张png图片,且通过PS可知蓝圆黄圆的具体坐标,需要将下方的两张图片合成到上方的位置中:

Python如何利用ROI进行图像合成

ROI合成圆形区域

def input_circle_img(img, file_path, img_part_name, x, y, r):    for file in os.listdir(file_path):        if img_part_name in file:            path = file_path + "\\" + file            class="lazy" data-src = cv_imread(path)            class="lazy" data-src = cv.resize(class="lazy" data-src, (r * 2 + 4, r * 2 + 4))            h, w, ch = class="lazy" data-src.shape            mask = np.zeros(class="lazy" data-src.shape[:2], dtype=np.uint8)            mask = cv.circle(mask, (r + 1, r + 1), r, (255, 255, 255), -1)            imgROI = img[(y - r):(y + r), (x - r):(x + r)]            mask = mask/255.0            a =  mask[..., None]            for row in range(imgROI.shape[0]):                for col in range(imgROI.shape[1]):                    if a[row, col]:                        imgROI[row, col] = class="lazy" data-src[row, col]
参数说明
img模板图片对象,即上文中的第一幅图片
file_path需要替换的图片所在的文件路径,即上文中的1_测试.jpg和2_测试.jpg所在的文件夹路径
img_part_name即需要替换的图片的(部分)文件名,比如我想换的是“1_测试.jpg”,则此参数可以为“1_”也可以为全名~(需要注意的是:填写的字符串尽量为文件夹中唯一的标识符,例如填“_测试”则可能导致想要的文件被其它图片所覆盖)
x图片中心在模板中的横向位置(与模板左侧的距离)
y图片中心在模板中的纵向位置(与模板上侧的距离)
r图片出于模板中的实际半径

之所以+4是因为之前利用seamlessClone时边缘会收到原模板的影响,改成ROI后懒得该回去了,不加应该也没什么问题~

def export_comp_img(path):    print("[START] export_comp_img ...")    for file_path in os.listdir(path):        file_path = path + "\\" + file_path        # 创建画布方法,就是利用np.zeros,与本文无关就不放啦~        img = create_img(2400, 3600)        input_circle_img(img, file_path, "2_", 1862, 800, 440)        input_circle_img(img, file_path, "1_", 1247, 558, 315)        # input_rect_img(img, file_path, "3_", (0, 2202), (2400, 2944))        # 保存图片方法,就是利用imencode,与本文无关就不放啦~        save_img(img, file_path)

不出意外的话应该就可以得到下面的这张图片啦!~

Python如何利用ROI进行图像合成

然后再把模板的那张PNG图片盖到最上面——可以利用上文中mask的思路,也可以放到PS里面合成~这里一方面我需要在PS中进行后续的一些操作,另一方面也需要观察图片边缘的处理效果,因而选择了后者。

Python如何利用ROI进行图像合成

和模板里的位置完美对齐!~
PS:如果是除圆以外的不规则图形的话,可以通过改变mask实现——最粗暴的便是加载一张mask图片~
而若是单纯的矩形选区的话则无视mask即可~
至此完结!~下面是一些无关紧要的补充……

ROI合成矩形区域

def input_rect_img(img, file_path, img_part_name, start_point, end_point):    for file in os.listdir(file_path):        if img_part_name in file:            path = file_path + "\\" + file            class="lazy" data-src = cv_imread(path)            h = end_point[1] - start_point[1]            w = end_point[0] - start_point[0]            class="lazy" data-src = cv.resize(class="lazy" data-src, (w, h))            imgROI = img[start_point[1]:(start_point[1] + h),start_point[0]:(start_point[0] + w)]            for row in range(imgROI.shape[0]):                for col in range(imgROI.shape[1]):                    imgROI[row, col] = class="lazy" data-src[row, col]

seamlessClone合成圆形区域

值得一提的是,一开始我用的是seamlessClone方法,但尝试了三种模式效果均不理想:

def input_circle_img_seamlessClone(img, file_path, img_part_name, x, y, r):    for file in os.listdir(file_path):        if img_part_name in file:            path = file_path + "\\" + file            class="lazy" data-src = cv_imread(path)            class="lazy" data-src = cv.resize(class="lazy" data-src, (r * 2 + 4, r * 2 + 4))            h, w, ch = class="lazy" data-src.shape            mask = np.zeros(class="lazy" data-src.shape[:2], dtype=np.uint8)            mask = cv.circle(mask, (r + 1, r + 1), r, (255, 255, 255), -1)            center = (x, y)            output = cv.seamlessClone(class="lazy" data-src, img, mask, center, cv.MIXED_CLONE)            return output

MIXED_CLONE

Python如何利用ROI进行图像合成

NORMAL_CLONE

Python如何利用ROI进行图像合成

MONOCHROME_TRANSFER

Python如何利用ROI进行图像合成

NORMAL_CLONEMIXED_CLONE的区别主要看的是两个圆的交界处,但这两种方法的边缘都会有一个过渡的处理,不太适合套模板的时候用……

“Python如何利用ROI进行图像合成”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python如何利用ROI进行图像合成

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python如何利用ROI进行图像合成

本篇内容介绍了“Python如何利用ROI进行图像合成”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!之前使用seamlessClone来合成
2023-06-20

Python利用ROI进行图像合成的问题小结

之前使用seamlessClone来合成图片,但发现在两张图片的交集部分会出现一些小问题…… 需求: 假设现在有一张图片(模板)中存在两个空格可以用来填照片(如下图所示):图中,蓝色的圆圈和黄色的圆圈为需要替换的内容,其余部分可以视为一张p
2022-06-02

Python+OpenCV数字图像处理中如何进行ROI区域的提取

本篇文章给大家分享的是有关Python+OpenCV数字图像处理中如何进行ROI区域的提取,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、实现原理先通过cv.cvtColor
2023-06-22

如何用 Python 进行 OCR 图像识别

这篇文章主要介绍“如何用 Python 进行 OCR 图像识别”,在日常操作中,相信很多人在如何用 Python 进行 OCR 图像识别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何用 Python 进行
2023-06-15

Python如何实现图像合成微缩效果

本篇内容主要讲解“Python如何实现图像合成微缩效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python如何实现图像合成微缩效果”吧!合成微缩效果前言图像中的模糊效果可以强烈影响被拍摄场
2023-07-05

如何进行Java ImageIO图像合并效率测试

这篇文章给大家介绍如何进行Java ImageIO图像合并效率测试,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。通过纯Java的方式往一张底图(地图)上添加小图片(布点),发现效果并不理想。何为纯java方式?就是说这
2023-06-17

如何利用Python将彩色图像转为灰度图像

小编给大家分享一下如何利用Python将彩色图像转为灰度图像,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!第一种方法Python的cv2库中自带彩色转灰度的方法,
2023-06-22

Python如何使用OpenCV对图像进行缩放功能

这篇文章主要介绍了Python如何使用OpenCV对图像进行缩放功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。OpenCV:图片缩放和图像金字塔对图像进行缩放的最简单方法
2023-06-29

Python如何使用cv2.canny进行图像边缘检测

这篇文章主要介绍了Python如何使用cv2.canny进行图像边缘检测问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-28

Python中Pillow库如何进行图像文件处理

小编给大家分享一下Python中Pillow库如何进行图像文件处理,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、打开PyCharm,创建一个新的.py文件2、
2023-06-25

如何进行Python OpenCV图像模糊处理分析

这篇文章跟大家分析一下“如何进行Python OpenCV图像模糊处理分析”。内容详细易懂,对“如何进行Python OpenCV图像模糊处理分析”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编
2023-06-26

如何在Python中进行图像处理和识别

如何在Python中进行图像处理和识别摘要:现代技术使得图像处理和识别在许多领域中成为了一个重要的工具。Python作为一种易于学习和使用的编程语言,具有丰富的图像处理和识别库。本文将介绍如何使用Python进行图像处理和识别,并提供具体的
2023-10-22

使用ImageMagick进行图片缩放、合成与裁剪(js+python)

由于需要在服务器端处理,使用就研究使用imagemagick来进行。同时准备封装了一个Node.js和Python的方法,主要还是讲一下然后使用imagemagick来对图片进行缩放、合成后进行裁剪吧
2022-11-15

利用Android如何实现对 ToolBar进行整合

本篇文章给大家分享的是有关利用Android如何实现对 ToolBar进行整合,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。CustomeToolBar继承原生ToolBarp
2023-05-31

如何利用VSTS跟Kubernetes整合进行CI/CD

这篇文章主要讲解了“如何利用VSTS跟Kubernetes整合进行CI/CD”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何利用VSTS跟Kubernetes整合进行CI/CD”吧!为什么
2023-06-19

如何利用python进行接口测试

这篇文章主要讲解了“如何利用python进行接口测试”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何利用python进行接口测试”吧!接口测试的坑第一个坑:POST 和 GET----GE
2023-06-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录