python OpenCV:seamlessClone泊松融合

news2025/1/11 2:33:32

一、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 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)

五、图例
 

                                     

               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.coloradmin.cn/o/1459966.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用C# Net6连接国产达梦数据库记录

达梦官网&#xff1a;http://www.dameng.com/ 1 下载达梦并进行安装 下载地址&#xff1a;官网首页——服务与合作——下载中心&#xff08;https://www.dameng.com/list_103.html&#xff09; 根据需要自行下载需要的版本&#xff0c;测试版本为&#xff1a;x86 win64 DM8版…

python3 flask 实现对config.yaml文件的内容的增删改查,并重启服务

config.yaml配置文件内容 功能就是userpass下的用户名和密码做增删改查&#xff0c;并重启hy2服务 auth:type: userpassuserpass:csdn: csdnlisten: :443 masquerade:proxy:rewriteHost: trueurl: https://www.bing.com/type: proxy tls:cert: /root/hyst*****马赛克******er…

先进电机技术——步进电机与伺服电机

一、步进电机 步进电机是一种特殊类型的电动机&#xff0c;它的工作方式是将输入的电脉冲信号转换成精确的机械运动——通常是转子的角位移或直线移动。每接收到一个电脉冲信号&#xff0c;步进电机内部的定子绕组按顺序通电&#xff0c;产生磁场变化&#xff0c;使得与之相互…

基于物联网智慧公厕的多功能城市智慧驿站

在现代城市发展中&#xff0c;智慧化已经成为了一个不可或缺的趋势。而多功能城市智慧驿站&#xff0c;作为智慧城市建设的一部分&#xff0c;以物联网智慧公厕为基础&#xff0c;集合了诸多功能于一身&#xff0c;成为了城市中不容忽视的存在。多功能城市智慧驿站也称为轻松的…

复高斯分布的随机变量的模方的分布

文章目录 复高斯分布的随机变量的模方的分布问题的源头矩阵服从复高斯分布向量服从复高斯分布 复高斯分布的随机变量的模方的分布 已知 X ∼ C N ( μ , Σ ) X \sim \mathcal{C N}(\boldsymbol{\mu}, \boldsymbol{\Sigma}) X∼CN(μ,Σ) 则 ∥ X ∥ 2 \|X\|^2 ∥X∥2的分布为…

c编译器学习04:chibicc的commits记录说明及所有代码的压缩包

整理commits记录的出发点 似乎没有更好的方法去学习代码。 最终决定听作者的建议&#xff0c;按照commits记录去看代码。 https://github.com/rui314/chibicc 页面316个commits实际对应295个版本&#xff0c;估计是有几个含有多次bug修正。 commits记录表格(图) commits记录…

Global Gamers Challenge | 与 Flutter 一起保护地球

作者 / Kelvin Boateng 我们知道 Flutter 开发者热爱挑战&#xff0c;因此我们很高兴地宣布&#xff0c;新一轮的 Flutter 挑战赛来了&#xff01; 挑战https://flutter.cn/events/puzzle-hack Global Gamers Challenge 是一项为期 8 周的比赛&#xff0c;参赛者需要设计、构建…

搭建SVN服务端和客户端

参考博客&#xff1a; https://zhuanlan.zhihu.com/p/428552058 先下载这两个文件&#xff1a; 链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1_1v_jKm3h7ZDSYEsgYyovA?pwd11ku 提取码&#xff1a;11ku –来自百度网盘超级会员V5的分享 第一个压缩包里有客户端…

Idea中使用git将多次提交记录合并成一次提交记录

一、查看Idea中的提交记录 查看Idea中的提交记录&#xff0c;我们希望将新增了bbb.txt、新增了ccc.txt、新增了ddd.txt,这三次提交记录合并成一次提交记录。 二、使用Interactively Rebase from Here进行合并 2.1、把鼠标放在新增了bbb.txt这次提交记录上并右键单击 把鼠标放…

一次平平无奇的 Oracle 注入

在某次项目中&#xff0c;首先是发现注入点&#xff0c;数据库是Oracle&#xff0c;利用方式是时间盲注&#xff1a; 因为需要具体数据&#xff0c;所以要深入利用&#xff0c;手工肯定不方便&#xff0c;所以直接上 Sqlmap: Sqlmap也可以扫出该注入点&#xff0c;但想要进一步…

Python开发户型图编辑器-2D/3D户型图展示

在现代家居设计中&#xff0c;户型图是不可或缺的工具&#xff0c;它为设计师和业主提供了一个直观的展示和规划空间的方式。然而&#xff0c;传统的户型图编辑软件往往复杂难用&#xff0c;限制了设计师的创作灵感。我们为您带来了一款全新的Python开发的户型图编辑器&#xf…

线上剧本杀APP小程序开发:开启全新的推理娱乐体验

随着数字化时代的到来&#xff0c;移动应用程序已经成为人们日常生活中不可或缺的一部分。在这个背景下&#xff0c;线上剧本杀APP小程序开发应运而生&#xff0c;为推理爱好者们提供了一种全新的娱乐方式。作为一家软件开发公司&#xff0c;我们很高兴为项目方提供有关线上剧本…

说一下 JVM 运行时数据区 ?

目录 一、程序计数器&#xff08;Program Counter Register&#xff09; 二、Java 虚拟机栈&#xff08;Java Virtual Machine Stacks&#xff09; 三、本地方法栈&#xff08;Native Method Stack&#xff09; 四、Java 堆&#xff08;Java Heap&#xff09; 五、方法区&…

maven插件exec-maven-plugin、maven-antrun-plugin使用详解

文章目录 前言一、exec-maven-plugin使用exec:java的使用idgoalsphaseconfigurationexec:exec的使用使用exec-maven-plugin来构建前端项目直接用mvn命令来使用exec-maven-plugin插件 二、maven-antrun-plugin使用echo打印功能拷贝文件拷贝文件夹ftp/scp/sshexec 总结 前言 在使…

数据结构链表力扣例题AC(3)——代码以及思路记录

160. 相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 AC写法一 struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {//思…

http前生今世

HTTP/0.9&#xff0c;仅支持GET方法&#xff0c;并且响应中没有HTTP头信息&#xff0c;只有文档内容。 HTTP/1.0增加了对POST方法、状态码、HTTP头信息等的支持&#xff0c;这一版本也是广泛应用的历史性版本。 HTTP/1.1引入了持久连接&#xff08;Persistent Connections&…

信号系统之连续信号处理

1 Delta 函数 连续信号可以分解为缩放和移位的增量函数&#xff0c;就像处理离散信号一样。不同之处在于&#xff0c;连续 delta 函数比其离散函数复杂得多&#xff0c;在数学上也抽象得多。我们不是用它是什么来定义连续 delta 函数&#xff0c;而是用它所具有的特征来定义它…

Python Web开发记录 Day1:HTML

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、HTML1、前端引入和HTML标签①前端引入②浏览…

公网对讲机可以和专网对讲机互通吗?

公网对讲机借助现有的4G/5G公网环境&#xff0c;能够承载更为丰富的宽带对讲功能&#xff0c;因而广受用户喜爱&#xff0c;其应用场景十分广泛。但在许多行业中&#xff0c;专网对讲机因其不可替代性&#xff0c;被视为关键通信应用&#xff0c;许多用户无法将其替换为公网对讲…

基于Web的网文管理系统

项目&#xff1a;基于Web的网文管理系统 伴随着时代的更替&#xff0c;我国人民的生活水平在不断提高&#xff0c;同时对生活娱乐的需求也在不断加大&#xff0c;我们在日常生活中通常会以多种方式娱乐自己&#xff0c;而阅读网络小说就是其中一种方式。随着计算机技术的成熟&a…