opencv转换颜色空间更改图片背景

时间:2021-05-22

本文实例为大家分享了opencv转换颜色空间更改图片背景的具体代码,供大家参考,具体内容如下

思路:

1、将BGR转换为HSV颜色空间
2、设置掩模
3、位运算

这里以更改摩托罗拉logo背景为例,图片在必应图片搜索得知,具体代码如下:

import numpy as npimport cv2from imageio import imreadimport matplotlib.pyplot as pltdef show(img,winname = "img"): cv2.namedWindow(winname,cv2.WINDOW_GUI_NORMAL) cv2.imshow(winname,img) cv2.waitKey(0) cv2.destroyAllWindows()imgpath = r'motorola.jpg'img = imread(imgpath)img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)if img.shape == 4: img = img[:,:,:3]show(img)print(img.shape)bgd = np.ones(img.shape,dtype=np.uint8)bgd[:,:,:] = 255 #转换为白色背景show(bgd,"white")# 转换颜色空间hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)# show(hsv)# 绿色分量掩模,使用inRange函数# lowergreen = np.array([35,43,46],dtype = np.uint8)# uppergreen = np.array([77,255,255],dtype=np.uint8)# maskgreen = cv2.inRange(hsv,lowergreen,uppergreen)# show(maskgreen)# 蓝色分量掩模,使用inRange函数lowerblue = np.array([100,43,46],dtype = np.uint8)upperblue = np.array([124,255,255],dtype=np.uint8)maskblue = cv2.inRange(hsv, lowerblue, upperblue)maskblue_inv = cv2.bitwise_not(maskblue)show(maskblue,'maskblue')show(maskblue_inv,'maskblue_inv')# 腐蚀操作kernel_erode = np.ones((3,3),dtype = np.uint8)erode = cv2.erode(maskblue,kernel_erode)# 膨胀操作kernel_dilate = np.ones((5,5),np.uint8)dilate = cv2.dilate(erode, kernel = kernel_dilate)show(erode,'erode')# 前景色只留下蓝色字体部分fg = cv2.bitwise_and(img,img,mask = maskblue)show(fg,'fg')# 背景中除去蓝色字体部分bg = cv2.bitwise_and(bgd,bgd,mask = maskblue_inv)show(bg,'bg')# 前景色和背景色相加dst = cv2.add(bg,fg)show(dst,'dst')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章