opencv转换颜色空间更改图片背景
本文实例为大家分享了opencv转换颜色空间更改图片背景的具体代码,供大家参考,具体内容如下
思路:
1、将BGR转换为HSV颜色空间
2、设置掩模
3、位运算
这里以更改摩托罗拉logo背景为例,图片在必应图片搜索得知,具体代码如下:
importnumpyasnp importcv2 fromimageioimportimread importmatplotlib.pyplotasplt defshow(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) ifimg.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')
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。