使用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 OpenCV快速入门教程
OpenCV OpenCV是计算机视觉中最受欢迎的库,最初由intel使用C和C ++进行开发的,现在也可以在python中使用.该库是一个跨平台的开源库,是免费使用的.OpenCV库是一个高度优化的库,主要关注实时应用程序. OpenCV库是2500多种优化算法的组合,可用于检测和识别不同的人脸,实时识别图像中的对象,使用视频和网络摄像头对不同的人类动作进行分类,跟踪摄像机的运动,跟踪运动对象(例如汽车,人等),实时计数对象,缝合图像来产生高分辨率图像,从图像数据库中查找相似的图像,从使用闪光
-
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
最近学了下 python opencv,分享下使用 opencv 在图片上绘制常用图形的方法. 案例中实现了在图片中添加线段.圆形.矩形.椭圆形以及添加文字的方法,使用 opencv2 实现的. 实现方法 1)画线段 cv.line 在图片中绘制一段直线 # 绘制线段 # 参数1:图片 # 参数2:起点 # 参数3:终点 # 参数4:BGR颜色 # 参数5:宽度 cv2.line(img, (60, 40), (90, 90), (255, 255, 255), 2); 参数说明 参数 值 说明
-
Python opencv缺陷检测的实现及问题解决
题目描述 利用opencv或其他工具编写程序实现缺陷检测. 实现过程 # -*- coding: utf-8 -*- ''' 作者 : 丁毅 开发时间 : 2021/4/21 15:30 ''' import cv2 import numpy as np from PIL import Image, ImageDraw, ImageFont import matplotlib.pyplot as plt #用于给图片添加中文字符的函数 def cv2ImgAddText(img, text, l
-
python基于OpenCV模板匹配识别图片中的数字
前言 本博客主要实现利用OpenCV的模板匹配识别图像中的数字,然后把识别出来的数字输出到txt文件中,如果识别失败则输出"读取失败". 操作环境: OpenCV - 4.1.0 Python 3.8.1 程序目标 单个数字模板:(这些单个模板是我自己直接从图片上截取下来的) 要处理的图片: 终端输出: 文本输出: 思路讲解 代码讲解 首先定义两个会用到的函数 第一个是显示图片的函数,这样的话在显示图片的时候就比较方便了 def cv_show(name, img): cv2.imsh
-
python读取并显示图片的三种方法(opencv、matplotlib、PIL库)
前言 在进行图像处理时,经常会用到读取图片并显示出来这样的操作,所以本文总结了python中读取并显示图片的3种方式,分别基于opencv.matplotlib.PIL库实现,并给出了示例代码,介绍如下. OpenCV OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux.Windows.Android和Mac OS操作系统上. 它轻量级而且高效--由一系列 C 函数和少量 C++ 类构成,同时提供了Python.Ruby.MATLAB等语言的接口
-
python-opencv中的cv2.inRange函数用法说明
本次目标是将一副图像从rgb颜色空间转换到hsv颜色空间,颜色去除白色背景部分 具体就调用了cv2的两个函数,一个是rgb转hsv的函数 具体用法 hsv = cv2.cvtColor(rgb_image, cv2.COLOR_BGR2HSV) 然后利用cv2.inRange函数设阈值,去除背景部分 mask = cv2.inRange(hsv, lower_red, upper_red) #lower20===>0,upper200==>0, 函数很简单,参数有三个 第一个参数:hsv指的是
-
python OpenCV学习笔记
图像翻转 使用Python的一个包,imutils.使用下面的指令可以安装. pip install imutils imutils包的Github地址:https://github.com/jrosebr1/imutils CSDN镜像:https://codechina.csdn.net/mirrors/jrosebr1/imutils 可以在上面这个地址里面学习更多的使用方式. import cv2 import imutils ''' imutils.rotate 第一个参数是翻转的图像
-
使用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
-
python opencv背景减去法抠图实现示例
目录 导包 导图 预处理 二值化图像 边缘检测 填充轮廓并制作掩模 保存 导包 import cv2 from matplotlib import pyplot as plt import numpy as np 导图 imA=cv2.imread("target.png") plt.imshow(cv2.cvtColor(imA,cv2.COLOR_BGR2RGB)) imA.shape #(2436, 1125, 3) imBG=cv2.imread("bg_30061.
-
python使用OpenCV模块实现图像的融合示例代码
可以通过OpenCV函数cv.add()或简单地通过numpy操作添加两个图像,res = img1 + img2.两个图像应该具有相同的深度和类型,或者第二个图像可以是标量值. 三种融合 注意融合时,一般来说两个图像的尺寸是一样大小的,如果大小不一样,需要把大的图像的某一部分先截出来,与小的图先融合,再作为整体替换掉原来大图中抠出的小图部分. """ # @Time : 2020/4/3 # @Author : JMChen """ impor
-
python 用opencv实现图像修复和图像金字塔
我们将学习如何通过一种称为修复的方法去除旧照片中的小噪音,笔画等.基本思路很简单:用相邻像素替换那些坏标记,使其看起来像邻域. cv2.inpaint() cv2.INPAINT_TELEA cv2.INPAINT_NS import numpy as np import cv2 as cv img = cv.imread('messi_2.jpg') mask = cv.imread('mask2.png',0) dst = cv.inpaint(img,mask,3,cv.INPAINT_T
-
python 使用OpenCV进行简单的人像分割与合成
实现思路 通过背景建模的方法,对源图像中的动态人物前景进行分割,再将目标图像作为背景,进行合成操作,获得一个可用的合成影像. 实现步骤如下. 使用BackgroundSubtractorMOG2进行背景分割 BackgroundSubtractorMOG2是一个以高斯混合模型为基础的背景前景分割算法, 混合高斯模型 分布概率是K个高斯分布的和,每个高斯分布有属于自己的 μμ 和 σσ 参数,以及对应的权重参数,权重值必须为正数,所有权重的和必须等于1,以确保公式给出数值是合理的概率密度值.换句话
-
python利用opencv实现颜色检测
本文实例为大家分享了python利用opencv实现颜色检测的具体代码,供大家参考,具体内容如下 需要实现倒车辅助标记检测的功能,倒车辅助标记颜色已经确定了,所以不需要使用深度学习的方法,那样成本太高了,直接可以使用颜色检测的方法. 1.首先需要确定待检测目标的HSV值 import cv2 img = cv2.imread('l3.png') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) hsv = cv2.cvtColor(img, cv2.COL
-
python基于Opencv实现人脸口罩检测
一.开发环境 python 3.6.6 opencv-python 4.5.1 二.设计要求 1.使用opencv-python对人脸口罩进行检测 三.设计原理 设计流程图如图3-1所示, 图3-1 口罩检测流程图 首先进行图片的读取,使用opencv的haar鼻子特征分类器,如果检测到鼻子,则证明没有戴口罩.如果检测到鼻子,接着使用opencv的haar眼睛特征分类器,如果没有检测到眼睛,则结束.如果检测到眼睛,则把RGB颜色空间转为HSV颜色空间.进行口罩区域的检测.口罩区域检测流程是首先把
-
Python实现Opencv cv2.Canny()边缘检测
目录 1. 效果图 2. 源码 补充:OpenCV-Python 中 Canny() 参数 这篇博客将介绍Canny边缘检测的概念,并利用cv2.Canny()实现边缘检测: Canny边缘检测是一种流行的边缘检测算法.它是由约翰F开发的,是一个多阶段的算法: Canny边缘检测大致包含4个步骤: 降噪(使用高斯滤波去除高频噪声): 计算边缘梯度和方向(SobelX.SobleY核在水平方向和垂直方向对平滑后的图像进行滤波,找到每个像素的边缘梯度和方向): 非最大抑制(在得到梯度大小和方向后,对
-
python中opencv图像叠加、图像融合、按位操作的具体实现
目录 1图像叠加 2图像融合 3按位操作 1图像叠加 可以通过OpenCV函数cv.add()或简单地通过numpy操作添加两个图像,res = img1 + img2.两个图像应该具有相同的深度和类型,或者第二个图像可以是标量值. NOTE: OpenCV添加是饱和操作,也就是有上限值,而Numpy添加是模运算. 添加两个图像时, OpenCV功能将提供更好的结果.所以总是更好地坚持OpenCV功能. 代码: import cv2 import numpy as np x = np.uint8
-
python计算机视觉opencv图像金字塔轮廓及模板匹配
目录 1.图像金字塔 ①高斯金字塔 ②拉普拉斯金字塔 2.图像轮廓 ①寻找轮廓 ②轮廓特征 ③轮廓绘制 3.模板匹配 ①模板匹配 ②匹配框线绘制 ③多对象匹配 4.直方图统计 ①直方图绘制 ②直方图统计 ③直方图的mask操作 ④直方图均衡化 5.傅里叶变换 1.图像金字塔 ①高斯金字塔 向下采样,数据会越来越少,减少的方式是:将偶数行和列删除 向上采样,数据会越来越多,将图像在每个方向上扩大为原来的两倍,新增的行和列用0来填充.使用先前同样的内核与放大后的图像卷积,获得近似值. 上采样之后,图
随机推荐
- Ruby简明教程之循环语句介绍
- 基于jquery animate操作css样式属性小结
- jQuery循环滚动展示代码 可应用到文字和图片上
- Android raw 目录下视频的缩略图的获取
- perl获取日期与时间的实例代码
- 在页面中引入js的两种方法(推荐)
- PHPExcel内存泄漏问题解决方法
- C#中如何利用正则表达式判断字符
- 跟老齐学Python之list和str比较
- Python的requests网络编程包使用教程
- 详细总结C++的排序算法
- 纯js实现画一棵树的示例
- javascript关于复选框的实用脚本代码
- Shell脚本逐行读取文本文件(不改变文本格式)
- 何时将数据装载到Application 或 Session 对象中去?
- 基于Bootstrap 3 JQuery及RegExp的表单验证功能
- C#实现基于加减按钮形式控制系统音量及静音的方法
- 如何限制同一用户名同时登陆
- C语言中对于循环结构优化的一些入门级方法简介
- SQL去除重复记录(七种)