导读

本期将介绍并演示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 cv2import numpy as np
flag = Falsex1=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=10Mat 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++源码)相关推荐

  1. 实战 | OpenCV如何将不同轮廓合并成一个轮廓(附Python / C++源码)

    点击下方卡片,关注"OpenCV与AI深度学习"公众号! 视觉/图像重磅干货,第一时间送达! 导读 本文主要介绍如何用OpenCV将不同的轮廓合并成一个轮廓的实现方法和代码演示. ...

  2. OpenCV技巧 | 二值图孔洞填充方法与实现(附Python/C++源码)

    点击上方"OpenCV与AI深度学习",选择加"星标"或"置顶" 重磅干货,第一时间送达 导读 本文主要介绍使用OpenCV对二值图做孔洞填 ...

  3. 基于OpenCV DNN模块给黑白老照片上色(附Python/C++源码)

    点击下方卡片,关注"OpenCV与AI深度学习"公众号! 导读 本文给大家分享一个用OpenCV DNN模块给黑白老照片上色的实例,并给出Python和C++版本源码. 背景介绍 ...

  4. 基于OpenCV的实时车道线分割&车道保持系统(源码&教程)

    1.研究背景 汽车主动安全系统能够实现风险的主动预防和规避,其能有力缓解当前我国汽车交通事故频发的困境,故对其的相关研究得到了国家的大力支持. 车道保持辅助系统(LKAS,Lane Keeping A ...

  5. Python基于OpenCV的智能交通灯系统(南北车流量比例)[源码&部署教程]

    1.研究背景: 在传统城市道路交通信号灯的应用过程中,存在专业技术人员较缺乏.项目投入资金少.信号灯故障抢修较困难等问题,为城市居民生活与出行带来极大不便.对此,文章进行深入研究,分析了城市道路智慧交 ...

  6. 基于OpenCV&ORB和特征匹配的双视频图像拼接(源码&部署教程)

    1.双视频拼接效果展示 2.视频演示 [项目分享]Python基于OpenCV&ORB和特征匹配的双视频图像拼接(源码&部署教程)_哔哩哔哩_bilibili 3.背景 随着汽车电子和 ...

  7. Python基于OpenCV&ORB和特征匹配的双视频图像拼接(源码&部署教程)

    1.双视频拼接效果展示 2.视频演示 [项目分享]Python基于OpenCV&ORB和特征匹配的双视频图像拼接(源码&部署教程)_哔哩哔哩_bilibili 3.背景 随着汽车电子和 ...

  8. 网站介绍三合一缩略图片kyuan源码 可自定义增加广告位

    介绍: 网站介绍三合一缩略图片kyuan源码 可自定义增加广告位 上传主机根目录解压打开域名就行. 使用记事本进行修改资料即可 网盘下载地址: http://kekewl.org/E4hICmomNs ...

  9. opencv4 图像无缝融合

    一:API函数介绍 OpenCV3.x的图像计算模块多了新算法API-无缝克隆(Seamless Cloning),主要是针对图像编辑,局部修改等应用场景实现迁移对象与原图像场景的无缝克隆.相关函数与 ...

最新文章

  1. 使用 python-nmap 进行端口扫描
  2. 区块链100讲:据说,80%的人都搞不懂哈希算法
  3. python优先队列_python 多线程优先队列Queue详解
  4. 一看就懂的感知机算法PLA
  5. 《精通J2EE网络编程》中讲的JNDI 6.1 什么是JNDI
  6. Java简单验证码的识别
  7. spring-service.xml 模板
  8. C#属性的声明和使用演示源码片段
  9. User-Agent 汇总
  10. c# md5加密算法实例
  11. 三星android 截图,三星手机如何截图?几种三星手机截屏的方法教程
  12. 高级软件程序员养成记
  13. Moses安装全记录
  14. CPU卡读写操作函数
  15. kubernetes 降本增效标准指南| 容器化计算资源利用率现象剖析
  16. Android Studio安装与SDK配置
  17. 新版kettle学习
  18. 2018.11.03 NOIP模拟 地球发动机(线性dp)
  19. Linux下网络服务的安全设置
  20. STM32的串口通信UART/TTL

热门文章

  1. 云计算 第七章 云安全(3)概述 云计算面临的安全问题 云安全问题的深层原因 云安全关键技术 云计算信息安全的国内外标准化
  2. chalk5.0.0不支持require()导入问题
  3. Servlet概念性回顾(结合Ajax)
  4. 【若依vue内容长宽设置】
  5. echarts实现双y轴
  6. 理查德30多岁开发出C语言,《C语言程序设计》多媒体教学课件开发与应用
  7. Excel获取指定数字格式文本——TEXT函数及其用法
  8. python 重复图片_删除重复文件或图片(去重)的python代码
  9. osi是什么?计算机有哪几层?每一层有什么作用?
  10. 什么是HashMap