使用python和opencv的mask实现抠图叠加

 更新时间:2021年04月24日 11:06:34   作者:P0ny  
这篇文章主要介绍了使用python和opencv的mask实现抠图叠加操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

背景照片:

这里写图片描述

logo:

这里写图片描述

合成效果:

这里写图片描述

代码:

import cv2 as cv, numpy as np
# Load two images
img1 = cv.imread('227351.jpg') # 背景
img2 = cv.imread('logo.png') # logo
# I want to put logo on top-left corner, So I create a ROI
rows,cols,channels = img2.shape
roi = img1[0:rows, 0:cols ]
# Now create a mask of logo and create its inverse mask also
img2gray = cv.cvtColor(img2,cv.COLOR_BGR2GRAY)
ret, mask = cv.threshold(img2gray, 254, 255, cv.THRESH_BINARY) # 这个254很重要
mask_inv = cv.bitwise_not(mask)
cv.imshow('mask',mask_inv)
# Now black-out the area of logo in ROI
img1_bg = cv.bitwise_and(roi,roi,mask = mask) # 这里是mask,我参考的博文写反了,我改正了,费了不小劲
# Take only region of logo from logo image.
img2_fg = cv.bitwise_and(img2,img2,mask = mask_inv) # 这里才是mask_inv
# Put logo in ROI and modify the main image
dst = cv.add(img1_bg,img2_fg)
img1[0:rows, 0:cols ] = dst
cv.imshow('res',img1)
cv.waitKey(0)
cv.destroyAllWindows()

补充:python opencv中的mask(遮罩inRange)的使用

可以看看我的注解

import cv2
import numpy as np
img = cv2.imread('IMG_0307.jpg')
orange_lower = np.array([11,43,46])
orange_upper = np.array([25,255,255]) #颜色色域
img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV) #注意 一定要转换为hsv 
mask = cv2.inRange(img_hsv,orange_lower,orange_upper) #mask 启动
mask = cv2.erode(mask,None,iterations=2) 
mask = cv2.GaussianBlur(mask,(3,3),0)
#erode 和 GaussianBlur 是用来使得图片或视频更加模糊的 这样可以使得色彩突出更加明显,#色彩追踪也会更加精准
cv2.imshow('mask',mask)
cv2.imshow('img',img)
cv2.waitKey()

使用opencv来处理图片的颜色,需要使用mask 遮罩来使得所需要的颜色被保留,不需要的颜色就隐藏掉。

在上面的代码中我设置的是用mask来遮住除了橘色之外的所有颜色

颜色参数就是orange_lower 和 orange_upper

具体效果如下

仅供参考

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • python数据可视化Seaborn绘制山脊图

    python数据可视化Seaborn绘制山脊图

    这篇文章主要介绍了利用python数据可视化Seaborn绘制山脊图,山脊图一般由垂直堆叠的折线图组成,这些折线图中的折线区域间彼此重叠,此外它们还共享相同的x轴.下面来看看具体的绘制过程吧,需要的小伙伴可以参考一下
    2022-01-01
  • Python如何向现有的DataFrame添加新列示例代码

    Python如何向现有的DataFrame添加新列示例代码

    Pandas库中的DataFrame是处理表格数据的主要数据结构,添加新列有多种方法,包括使用现有列的值、创建全为零或全为一的列、或者直接添加一个由特定值组成的列,这些方法在处理数据时非常有用,需要的朋友可以参考下
    2024-11-11
  • python实现爬取千万淘宝商品的方法

    python实现爬取千万淘宝商品的方法

    这篇文章主要介绍了python实现爬取千万淘宝商品的方法,涉及Python页面抓取的相关技巧,需要的朋友可以参考下
    2015-06-06
  • python针对excel的操作技巧

    python针对excel的操作技巧

    这篇文章主要介绍了python针对excel的操作方法,需要的朋友可以参考下
    2018-03-03
  • Python图像处理之边缘检测原理详解

    Python图像处理之边缘检测原理详解

    边缘检测是图像处理和计算机视觉当中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。本文将通过示例和大家介绍一下边缘检测的原理,希望对大家有所帮助
    2022-12-12
  • Python中的基本数据类型介绍

    Python中的基本数据类型介绍

    这篇文章介绍了Python中的基本数据类型,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • TensorFlow2.0:张量的合并与分割实例

    TensorFlow2.0:张量的合并与分割实例

    今天小编就为大家分享一篇TensorFlow2.0:张量的合并与分割实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python OpenCV实现简单的颜色识别功能(对红色和蓝色识别并输出)

    Python OpenCV实现简单的颜色识别功能(对红色和蓝色识别并输出)

    Python OpenCV可以用来进行颜色识别,可以通过读取图像的像素值,来判断像素点的颜色,从而实现颜色识别,这篇文章主要给大家介绍了关于Python OpenCV实现简单的颜色识别功能(对红色和蓝色识别并输出)的相关资料,需要的朋友可以参考下
    2023-12-12
  • Python学习之字符串常用操作详解

    Python学习之字符串常用操作详解

    字符串是Pyhon中的常用的数据类型,这篇文章主要为大家详细介绍一下python字符串的一些常用操作,文中示例代码讲解详细,需要的朋友可以参考下
    2022-09-09
  • Matlab中的mat数据转成python中使用的npy数据遇到的坑及解决

    Matlab中的mat数据转成python中使用的npy数据遇到的坑及解决

    这篇文章主要介绍了Matlab中的mat数据转成python中使用的npy数据遇到的坑及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12

最新评论