Python Opencv cv2提取图像中某种特定颜色区域(例如黑字白纸背景下的红色公章提取),并将纯色背景透明化

拜拜PHOTOSHOP-

领导突然让我帮他把公章从图片中抠出来,在确保了不是要做坏事的情况下,我打开了PHOTOSHOP,用魔棒工具一点一点抠,但由于魔棒工具的原理是对比临近区域像素差值,导致封闭字体中的区域无法剔除,而且一点一点抠非常麻烦,愤而PYTHON,使用CV2完美解决。
效果如下(马赛克是我添加的):
Python Opencv cv2提取图像中某种特定颜色区域(例如黑字白纸背景下的红色公章提取),并将纯色背景透明化_第1张图片
任务就是把蓝色的公章抠出来。
Python Opencv cv2提取图像中某种特定颜色区域(例如黑字白纸背景下的红色公章提取),并将纯色背景透明化_第2张图片
效果如上。
代码如下:

import cv2
import numpy as np
src = cv2.imread(r"imagepath")#这里填你的原图像路径
cv2.namedWindow("input", cv2.WINDOW_AUTOSIZE)
cv2.imshow("input", src)
"""
提取图中的蓝色部分
"""
hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)#BGR转HSV
low_hsv = np.array([100,43,46])#这里要根据HSV表对应
,填入三个min值(表在下面)
high_hsv = np.array([124,255,255])#这里填入三个max值
mask = cv2.inRange(hsv,lowerb=low_hsv,upperb=high_hsv)#提取掩膜

#黑色背景转透明部分
mask_contrary = mask.copy()
mask_contrary[mask_contrary==0]=1
mask_contrary[mask_contrary==255]=0#把黑色背景转白色
mask_bool = mask_contrary.astype(bool)
mask_img = cv2.add(src, np.zeros(np.shape(src), dtype=np.uint8), mask=mask)
#这个是把掩模图和原图进行叠加,获得原图上掩模图位置的区域
mask_img=cv2.cvtColor(mask_img,cv2.COLOR_BGR2BGRA)
mask_img[mask_bool]=[0,0,0,0]
#这里如果背景本身就是白色,可以不需要这个操作,或者不需要转成透明背景就不需要这里的操作




cv2.imshow("image",mask_img)
cv2.imwrite('label123.png',mask_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Python Opencv cv2提取图像中某种特定颜色区域(例如黑字白纸背景下的红色公章提取),并将纯色背景透明化_第3张图片

你可能感兴趣的:(Opencv,Python,CV2,opencv,python,计算机视觉)