OpenCV图像无缝融合-seamlessClone介绍与使用(附Python/C++源码)
导读
本期将介绍并演示OpenCV使用seamlessClone实现图像无缝融合效果。
介绍
seamlessClone是OpenCV3后添加的函数,使用此函数可以轻松将一幅图像中的指定目标复制后粘贴到另一幅图像中,并自然的融合。函数说明:
参数:
src | 输入8位3通道图像(截取目标的大图) |
dst | 输入8位3通道图像(待粘贴融合的目标背景图标) |
mask | 输入8位1或3通道图像(目标掩码区域图像) |
p | 对象被放置在目标图像dst中的位置 |
blend | 输出图像,与dst具有相同大小和类型。 |
flags | 克隆方法可以是cv :: NORMAL_CLONE,cv :: MIXED_CLONE或cv :: MONOCHROME_TRANSFER |
-NORMAL_CLONE: 不保留dst 图像的texture细节。目标区域的梯度只由源图像决定。
-MIXED_CLONE: 保留dest图像的texture 细节。目标区域的梯度是由原图像和目的图像的组合计算出来(计算dominat gradient)。
-MONOCHROME_TRANSFER: 不保留src图像的颜色细节,只有src图像的质地,颜色和目标图像一样,可以用来进行皮肤质地填充。
效果展示
手动框选左图中的花灯,然后自动粘贴融合到右图背景中:
OpenCV图像处理——放花灯2效果更好
手动框选左图中的飞机,然后自动粘贴融合到右图背景中并动起来:
我们的目标是星辰大海——OpenCV无缝克隆应用
参数对比演示与实现步骤
src图:
框选ROI区域设定mask:
dst背景图:
NORMAL_CLONE:
MIXED_CLONE:
MONOCHROME_TRANSFER:
对比发现第二种MIXED_CLONE参数效果融合最自然,不会覆盖背景图信息。
放花灯程序实现步骤:
(1) 使用OpenCV鼠标事件绘制矩形截取Rect设置mask(不会的话看我B站的视频教程有详细讲解);
(2) 使用seamlessClone完成图像融合。
效果见开头效果视频,源码如下:
(1) Python版本:
import cv2
import numpy as np
flag = False
x1=y1=0
def gen_light(rect):
global temp2,result,dst,temp
temp2 = temp.copy() #原图备份
mask1 = np.zeros(temp2.shape, temp2.dtype)
cv2.rectangle(mask1,rect,(255,255,255),-1)
result = cv2.seamlessClone(temp2, dst, mask1, (400,200), cv2.MONOCHROME_TRANSFER)
cv2.imshow('result',result)
def screenShot(event,x,y,flags,param):
global x1,y1,flag,img,temp
if event==cv2.EVENT_LBUTTONDOWN: #鼠标左键按下
flag = True #表示当前鼠标左键是按下的
x1 = x
y1 = y
elif event==cv2.EVENT_MOUSEMOVE: #鼠标移动
if(flag):
img = temp.copy()#原图复制(把绘制的矩形清空)
cv2.rectangle(img,(x1,y1),(x,y),(0,255,0),2)
elif event==cv2.EVENT_LBUTTONUP: #鼠标左键弹起
flag = False
ROI = temp[y1:y,x1:x] #---y1:y2, x1:x2
gen_light((x1,y1,x-x1,y-y1))
img = cv2.imread('light.jpg') #读取图像
dst = cv2.imread("./2.jpg")
temp = img.copy() #原图备份
cv2.imshow("result", dst)
cv2.namedWindow('selectROI')
cv2.setMouseCallback('selectROI',screenShot)
while(1):
cv2.imshow('selectROI',img)
if cv2.waitKey(1)&0xFF==27: #Esc按下退出
break
cv2.destroyAllWindows()
(2) C++版本核心代码:
//鼠标事件绘制矩形代码看B站视频,地址:
//https://www.bilibili.com/video/BV1sa4y1s7FR?p=10
Mat src = imread("light.jpg");
Mat dst = imread("2.jpg");
Mat mask = Mat::zeros(src.rows, src.cols, src.depth());
rectangle() //绘制mask自己添加
Point center(400,200);
Mat output;
seamlessClone(src, dst, mask, center, output, NORMAL_CLONE);
OpenCV例程:
更多视觉图像处理相关内容,请关注公众号:OpenCV与AI深度学习。
OpenCV图像无缝融合-seamlessClone介绍与使用(附Python/C++源码)相关推荐
- 实战 | OpenCV如何将不同轮廓合并成一个轮廓(附Python / C++源码)
点击下方卡片,关注"OpenCV与AI深度学习"公众号! 视觉/图像重磅干货,第一时间送达! 导读 本文主要介绍如何用OpenCV将不同的轮廓合并成一个轮廓的实现方法和代码演示. ...
- OpenCV技巧 | 二值图孔洞填充方法与实现(附Python/C++源码)
点击上方"OpenCV与AI深度学习",选择加"星标"或"置顶" 重磅干货,第一时间送达 导读 本文主要介绍使用OpenCV对二值图做孔洞填 ...
- 基于OpenCV DNN模块给黑白老照片上色(附Python/C++源码)
点击下方卡片,关注"OpenCV与AI深度学习"公众号! 导读 本文给大家分享一个用OpenCV DNN模块给黑白老照片上色的实例,并给出Python和C++版本源码. 背景介绍 ...
- 基于OpenCV的实时车道线分割&车道保持系统(源码&教程)
1.研究背景 汽车主动安全系统能够实现风险的主动预防和规避,其能有力缓解当前我国汽车交通事故频发的困境,故对其的相关研究得到了国家的大力支持. 车道保持辅助系统(LKAS,Lane Keeping A ...
- Python基于OpenCV的智能交通灯系统(南北车流量比例)[源码&部署教程]
1.研究背景: 在传统城市道路交通信号灯的应用过程中,存在专业技术人员较缺乏.项目投入资金少.信号灯故障抢修较困难等问题,为城市居民生活与出行带来极大不便.对此,文章进行深入研究,分析了城市道路智慧交 ...
- 基于OpenCV&ORB和特征匹配的双视频图像拼接(源码&部署教程)
1.双视频拼接效果展示 2.视频演示 [项目分享]Python基于OpenCV&ORB和特征匹配的双视频图像拼接(源码&部署教程)_哔哩哔哩_bilibili 3.背景 随着汽车电子和 ...
- Python基于OpenCV&ORB和特征匹配的双视频图像拼接(源码&部署教程)
1.双视频拼接效果展示 2.视频演示 [项目分享]Python基于OpenCV&ORB和特征匹配的双视频图像拼接(源码&部署教程)_哔哩哔哩_bilibili 3.背景 随着汽车电子和 ...
- 网站介绍三合一缩略图片kyuan源码 可自定义增加广告位
介绍: 网站介绍三合一缩略图片kyuan源码 可自定义增加广告位 上传主机根目录解压打开域名就行. 使用记事本进行修改资料即可 网盘下载地址: http://kekewl.org/E4hICmomNs ...
- opencv4 图像无缝融合
一:API函数介绍 OpenCV3.x的图像计算模块多了新算法API-无缝克隆(Seamless Cloning),主要是针对图像编辑,局部修改等应用场景实现迁移对象与原图像场景的无缝克隆.相关函数与 ...
最新文章
- 使用 python-nmap 进行端口扫描
- 区块链100讲:据说,80%的人都搞不懂哈希算法
- python优先队列_python 多线程优先队列Queue详解
- 一看就懂的感知机算法PLA
- 《精通J2EE网络编程》中讲的JNDI 6.1 什么是JNDI
- Java简单验证码的识别
- spring-service.xml 模板
- C#属性的声明和使用演示源码片段
- User-Agent 汇总
- c# md5加密算法实例
- 三星android 截图,三星手机如何截图?几种三星手机截屏的方法教程
- 高级软件程序员养成记
- Moses安装全记录
- CPU卡读写操作函数
- kubernetes 降本增效标准指南| 容器化计算资源利用率现象剖析
- Android Studio安装与SDK配置
- 新版kettle学习
- 2018.11.03 NOIP模拟 地球发动机(线性dp)
- Linux下网络服务的安全设置
- STM32的串口通信UART/TTL
热门文章
- 云计算 第七章 云安全(3)概述 云计算面临的安全问题 云安全问题的深层原因 云安全关键技术 云计算信息安全的国内外标准化
- chalk5.0.0不支持require()导入问题
- Servlet概念性回顾(结合Ajax)
- 【若依vue内容长宽设置】
- echarts实现双y轴
- 理查德30多岁开发出C语言,《C语言程序设计》多媒体教学课件开发与应用
- Excel获取指定数字格式文本——TEXT函数及其用法
- python 重复图片_删除重复文件或图片(去重)的python代码
- osi是什么?计算机有哪几层?每一层有什么作用?
- 什么是HashMap