Opencv python: seamlessClone泊松融合 (我把Lena变成了彼岸花怪/(ㄒoㄒ)/~~)

2023-10-14 17:20

本文主要是介绍Opencv python: seamlessClone泊松融合 (我把Lena变成了彼岸花怪/(ㄒoㄒ)/~~),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为什么要进行融合呢?原因是LZ在进行贴图操作的时候,经常会出现很明显的边界效应,在各种查找资料的情况下,找到了一种比较适合图像融合的方法,并且OpenCV有对应的接口,所以就网上下了图片,做了一些尝试,当然最后并没有使用这个函数是因为贴图效果太不明显了,LZ甚至以为是自己代码写错了,所以这个函数因人而异。

首先这个函数的用法:

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

NORMAL_CLONE
Python: cv.NORMAL_CLONE
The power of the method is fully expressed when inserting objects with complex outlines into a new background
将具有复杂轮廓的对象插入新背景,也就是说不保留dst 图像的texture细节,目标区域的梯度只由源图像决定。

MIXED_CLONE
Python: cv.MIXED_CLONE

The classic method, color-based selection and alpha masking might be time consuming and often leaves an undesirable halo. Seamless cloning, even averaged with the original image, is not effective. Mixed seamless cloning based on a loose selection proves effective.
基于宽松选择的混合无缝克隆,保留des图像的texture 细节。目标区域的梯度是由原图像和目的图像的组合计算出来(计算dominat gradient)。

MONOCHROME_TRANSFER
Python: cv.MONOCHROME_TRANSFER
Monochrome transfer allows the user to easily replace certain features of one object by alternative features.
不保留src图像的颜色细节,只有src图像的质地,颜色和目标图像一样,可以用来进行皮肤质地填充(美颜是不是可以用呢?)

import cv2 
import numpy as np# read our test imges
img1 = cv2.imread("../test_imgs/lena_standard.jpg")
img2 = cv2.imread("../test_imgs/beiji.jpeg")
cv2.imshow("img1", img1)
cv2.imshow("img2", img2)
cv2.waitKey()
cv2.destroyAllWindows()

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

# create an white mask
mask = 255*np.ones(img1.shape, img1.dtype)
# the location of the src in the dst
width, height, channel = img2.shape
center = (int(height/2), int(width/2))
normal_clone = cv2.seamlessClone(img1, img2, mask, center, cv2.NORMAL_CLONE)
cv2.imshow("normal_clone", normal_clone)
cv2.waitKey()

在这里插入图片描述

mixed_clone = cv2.seamlessClone(img1, img2, mask, center, cv2.MIXED_CLONE)
cv2.imshow("mixed_clone", mixed_clone)
cv2.waitKey()
# cv2.destroyAllWindows()

在这里插入图片描述

mono_clone = cv2.seamlessClone(img1, img2, mask, center, cv2.MONOCHROME_TRANSFER)
cv2.imshow("mono_clone", mono_clone)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述
额,测试图片感觉没选好,融合起来感觉哪里怪怪的/(ㄒoㄒ)/~~

#这段代码写的可随意了,就是生成一个mask,做一个融合
img1_gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)    
ret, binary = cv2.threshold(img1_gray, 100, 255, cv2.THRESH_BINARY | cv2.THRESH_TRIANGLE)contours, _ = cv2.findContours(binary,cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# print("contour: ", contour)
src_mask = np.zeros(img1.shape, img1.dtype)area = []
want_area = []
for i in range(len(contours)):area.append(cv2.contourArea(contours[i]))
area.sort()
for i in range(len(contours)):if (cv2.contourArea(contours[i]) < area[-1]):cv2.fillConvexPoly(src_mask, contours[i], 0)else:cv2.fillConvexPoly(src_mask, contours[i], (255,255, 255))
test_mask = src_mask[:,:,1]# print("mask_shape: ", mask_new.shape)
normal_clone_bin = cv2.seamlessClone(img1, img2, test_mask, center, cv2.NORMAL_CLONE)cv2.imshow("normal_clone_bin", normal_clone_bin)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

参考地址:

  1. https://www.jianshu.com/p/49adfbe4b804
  2. https://docs.opencv.org/3.4/df/da0/group__photo__clone.html

这篇关于Opencv python: seamlessClone泊松融合 (我把Lena变成了彼岸花怪/(ㄒoㄒ)/~~)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/211972

相关文章

Python使用Pandas对比两列数据取最大值的五种方法

《Python使用Pandas对比两列数据取最大值的五种方法》本文主要介绍使用Pandas对比两列数据取最大值的五种方法,包括使用max方法、apply方法结合lambda函数、函数、clip方法、w... 目录引言一、使用max方法二、使用apply方法结合lambda函数三、使用np.maximum函数

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及