python OpenCV:seamlessClone泊松融合

一、seamlessClone函数的用法

翻译

https://www.learnopencv.com/seamless-cloning-using-opencv-python-cpp/

def seamlessClone(src, dst, mask, p, flags, blend=None): # real signature unknown; restored from __doc__"""seamlessClone(src, dst, mask, p, flags[, blend]) -> blend.   @brief Image editing tasks concern either global changes (color/intensity corrections, filters,.   deformations) or local changes concerned to a selection. Here we are interested in achieving local.   changes, ones that are restricted to a region manually selected (ROI), in a seamless and effortless.   manner. The extent of the changes ranges from slight distortions to complete replacement by novel.   content @cite PM03 ..   .   @param src Input 8-bit 3-channel image..   @param dst Input 8-bit 3-channel image..   @param mask Input 8-bit 1 or 3-channel image..   @param p Point in dst image where object is placed..   @param blend Output image with the same size and type as dst..   @param flags Cloning method that could be cv::NORMAL_CLONE, cv::MIXED_CLONE or cv::MONOCHROME_TRANSFER"""pass


Python: cv.NORMAL_CLONE
将具有复杂轮廓的对象插入新背景,也就是说不保留dst 图像的texture细节,目标区域的梯度只由源图像决定。


Python: cv.MIXED_CLONE
基于宽松选择的混合无缝克隆,保留des图像的texture 细节。目标区域的梯度是由原图像和目的图像的组合计算出来(计算dominat gradient)。


Python: cv.MONOCHROME_TRANSFER
不保留src图像的颜色细节,只有src图像的质地,颜色和目标图像一样,可以用来进行皮肤质地填充

二、两张图像融合代码


import cv2
import numpy as np# Read images : src image will be cloned into dst
im = cv2.imread("wolf_2.jpg")
obj= cv2.imread('wolf_1.jpg')# Create an all white mask
mask = 255 * np.ones(obj.shape, obj.dtype)# The location of the center of the src in the dst
width, height, channels = im.shape
center = (height/2, width/2)# Seamlessly clone src into dst and put the results in output
normal_clone = cv2.seamlessClone(obj, im, mask, center, cv2.NORMAL_CLONE)
mixed_clone = cv2.seamlessClone(obj, im, mask, center, cv2.MIXED_CLONE)# Write results
cv2.imwrite("opencv-normal-clone-example.jpg", normal_clone)
cv2.imwrite("opencv-mixed-clone-example.jpg", mixed_clone)

三、踩坑记录

错误1:

 normal_clone = cv2.seamlessClone(obj, im, mask, center, cv2.NORMAL_CLONE)
cv2.error: OpenCV(4.7.0) :-1: error: (-5:Bad argument) in function 'seamlessClone'

 error提示索引为1的参数类型错误,即center = (height/2, width/2)

通过打印发现center数据类型为float

改为center = (height//2, width//2)或者center = (int(height/2), int(width/2))

错误2:

 error: (-215:Assertion failed) 0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows in function 'cv::Mat::Mat'


图像的obj区域超过了im图像的尺寸,即roi.x + roi.width > m.cols && roi.y + roi.height > m.rows

解决办法:

判断obj区域尺寸是否在im图像内,调换两张图的融合顺序或者缩放到合适的尺寸

四、修改后完整代码

# 注意修改路径!
import cv2
import numpy as np# Read images : src image will be cloned into dst
im = cv2.imread("wolf_1.jpg")
obj= cv2.imread('wolf_2.jpg')#进行图片尺寸变更,obj的尺寸小于im尺寸
obj=cv2.resize(obj,(obj.shape[0]//4,obj.shape[1]//4),interpolation=cv2.INTER_LINEAR)# Create an all white mask
mask = 255 * np.ones(obj.shape, obj.dtype)# The location of the center of the src in the dstwidth, height, channels = im.shape#小图融合位置
center = (height//2, width//2)# Seamlessly clone src into dst and put the results in output
normal_clone = cv2.seamlessClone(obj, im, mask, center, cv2.NORMAL_CLONE)
mixed_clone = cv2.seamlessClone(obj, im, mask, center, cv2.MIXED_CLONE)# Write results
cv2.imwrite("opencv-normal-clone-example.jpg", normal_clone)
cv2.imwrite("opencv-mixed-clone-example.jpg", mixed_clone)

五、图例
 

                                     

               wolf_1.jpg                                                                           wolf_2.jpg

                                   

opencv-mixed-clone-example.jpg                                       opencv-normal-clone-example.jpg

参考地址:

Opencv python: seamlessClone泊松融合 (我把Lena变成了彼岸花怪/(ㄒoㄒ)/~~)_opencv-python cv.seamlessclone-CSDN博客

 图像泊松融合学习笔记_opencv 泊松融合-CSDN博客

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

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

相关文章

Django后台管理(一)

一、admin介绍 Django 最强大的部分之一是自动管理界面。它从你的模型中读取元数据,提供一个快速的、以模型为中心的界面,受信任的用户可以管理你网站上的内容 官网:https://docs.djangoproject.com/zh-hans/4.1/ref/contrib/admin/ 提示 后台管理系统是管理人员使用,不是…

Spring6学习技术|IoC+基于xml管理bean

学习材料 尚硅谷Spring零基础入门到进阶&#xff0c;一套搞定spring6全套视频教程&#xff08;源码级讲解&#xff09; IoC 控制反转。是一种设计思想。 1.获取bean对象的方法 通过id&#xff0c;通过class&#xff0c;和双重方式。 ApplicationContext context new Cla…

opencv图像处理(一)

一. OpenCV 简介 OpenCV 是一个跨平台计算机视觉库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上。 应用领域 1、人机互动 2、物体识别 3、图像分割 4、人脸识别 5、动作识别 6、运动跟踪 7、机器人 8、运动分析 9、机器视觉 10、…

宝塔nginx配置SpringBoot服务集群代理

宝塔nginx配置SpringBoot服务集群代理 1、需求&#xff1a; 现有一个springboot服务需要部署成集群&#xff0c;通过nginx负载均衡进行访问&#xff0c;其中这个springboot服务内置了MQTT服务、HTTP服务、TCP服务。 MQTT服务开放了1889端口 HTTP服务开放了8891端口 HTTP服务开…

Laravel02 路由基本概念和用法 给视图传递请求参数

Laravel02 路由基本概念和用法 1. 路由的基本概念2. 给视图传递请求参数 1. 路由的基本概念 routes文件夹下的web.php是用来定义路由规则的。 自己定义一个路径 2. 给视图传递请求参数 在laravel里使用一个辅助函数request来快速获取请求参数

OpenGL学习——17.模型

前情提要&#xff1a;本文代码源自Github上的学习文档“LearnOpenGL”&#xff0c;我仅在源码的基础上加上中文注释。本文章不以该学习文档做任何商业盈利活动&#xff0c;一切著作权归原作者所有&#xff0c;本文仅供学习交流&#xff0c;如有侵权&#xff0c;请联系我删除。L…

python+selenium 定位到元素,无法点击的解决方法

今天小编就为大家分享一篇pythonselenium 定位到元素,无法点击的解决方法&#xff0c;具有很好的参考价值&#xff0c;希望对大家有所帮助。一起跟随小编过来看看吧 selenium.common.exceptions.WebDriverException: Message: Element is not clickable at point (234.75, 22)…

LeetCode 0429.N 叉树的层序遍历:广度优先搜索(BFS)

【LetMeFly】429.N 叉树的层序遍历&#xff1a;广度优先搜索(BFS) 力扣题目链接&#xff1a;https://leetcode.cn/problems/n-ary-tree-level-order-traversal/ 给定一个 N 叉树&#xff0c;返回其节点值的层序遍历。&#xff08;即从左到右&#xff0c;逐层遍历&#xff09;…

芋道-------如何实现工作流退回后重新提交到之前退回的节点

一、概述 上一节&#xff0c;我们讲过了工作流如何退回到申请人&#xff0c;接下来我们来讲一讲&#xff0c;如何重新提交。这里重新提交可以是再走一遍正常流程&#xff0c;同时也可以是直接跳过中间的步骤&#xff0c;直接继续给上一步退回的人审批。文章中会提及这两种情况。…

如何在iStoreOS软路由系统中安装cpolar实现公网远程本地电脑桌面

文章目录 简介一、配置远程桌面公网地址二、家中使用永久固定地址 访问公司电脑**具体操作方法是&#xff1a;** 简介 软路由是PC的硬件加上路由系统来实现路由器的功能&#xff0c;也可以说是使用软件达成路由功能的路由器。 使用软路由控制局域网内计算机的好处&#xff1a…

Weblogic漏洞复现【含解密和shell连接工具】

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将信息做其他用途&#xff0c;由Ta承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 1、漏洞成因 序列化和反序列化本身并不存在问题&#x…

阿里云服务器价格购买价格表,一目了然!

2024年阿里云服务器租用价格表更新&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核4G服…