介绍
本篇文章为大家展示了使用opencv怎么转换颜色空间并更改图片背景,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
思路:
1,将BGR转换为HSV颜色空间
2,设置掩模
3位运算
这里以更改摩托罗拉标志背景为例,图片在必应图片搜索得知,具体代码如下:
import numpy as np import cv2 得到imageio import  imread import matplotlib.pyplot  as plt def 显示(img winname =,“img"): ,cv2.namedWindow (winname cv2.WINDOW_GUI_NORMAL) ,cv2.imshow (winname img) ,cv2.waitKey (0) ,cv2.destroyAllWindows () 时间=imgpath " # 39; motorola.jpg& # 39; 时间=img imread (imgpath) 时间=img cv2.cvtColor (img cv2.COLOR_BGR2RGB) if img.shape ==, 4:=,img, img  (::,: 3) 显示(img) 打印(img.shape) 时间=bgd np.ones (img.shape dtype=np.uint8) bgd[::,:],=, 255, #转换为白色背景 显示(bgd,“white") #,转换颜色空间 时间=hsv cv2.cvtColor (img cv2.COLOR_BGR2HSV) #,显示(hsv) #,绿色分量掩模,使用inRange函数=#,lowergreen np.array(35, 43岁,46岁,dtype =, np.uint8)=#,uppergreen np.array ([77255255], dtype=np.uint8)=#,maskgreen cv2.inRange (hsv, lowergreen uppergreen) #,显示(maskgreen) #,蓝色分量掩模,使用inRange函数 时间=lowerblue np.array(100年,43岁,46岁,dtype =, np.uint8) 时间=upperblue np.array ([124255255], dtype=np.uint8) 时间=maskblue cv2.inRange (hsv, lowerblue,, upperblue) 时间=maskblue_inv cv2.bitwise_not (maskblue) 显示(maskblue & # 39; maskblue& # 39;) 显示(maskblue_inv & # 39; maskblue_inv& # 39;) #,腐蚀操作 时间=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(侵蚀,kernel =, kernel_dilate) 显示(侵蚀,& # 39;侵蚀# 39;) #,前景色只留下蓝色字体部分 时间=fg cv2.bitwise_and (img, img mask =, maskblue) 显示(fg, & # 39; fg # 39;) #,背景中除去蓝色字体部分 时间=bg cv2.bitwise_and (bgd bgd, mask =, maskblue_inv) 显示(bg & # 39; bg # 39;) #,前景色和背景色相加 时间=dst cv2.add (bg, fg) 显示(dst & # 39; dst # 39;)