1.颜色过滤
import numpy as np
import cv2
#lower_red和upper_red是黑色HSV阈值
lower_red = np.array([0,0,0])
upper_red = np.array([180,255,46])
img = cv2.imread("D:\\color_filtering.jpg",cv2.IMREAD_COLOR)
#颜色过滤后的对象hsv
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
#cv2.inrange()函数可以设定阈值
mask = cv2.inRange(hsv,lower_red,upper_red)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.imshow('mask',mask)
cv2.waitKey(0)
#销毁动作,因为是两张图片,所以用destoryAllWindows,不用destoreWindow
cv2.destroyAllWindows()
2.形态变换
先对原图的黑色进行过滤,过滤后分别进行服饰,膨胀,开操作,比操作
腐蚀:让滑块滑动(此处滑块的大小为5×5像素的)。如果滑块内所有的像素都是白色的,那么得到白色,否则得到黑色。腐蚀有助于消除一些白色噪声
膨胀:于腐蚀相反,如果整个滑块不全部是黑色的,就会转成白色。
开操作:先腐蚀后膨胀,消除二值图像中小的白色干扰区域
比操作:先膨胀后腐蚀,消除二值图像中小的黑色干扰区域
import cv2
import numpy as np
lower_red = np.array([0,0,0])
upper_red = np.array([180,255,46])
img = cv2.imread("D:\\color_filtering.jpg",cv2.IMREAD_COLOR)
hsv = cv2.cvtColor(img,cv2.COLOR_RGB2HSV)
mask = cv2.inRange(hsv,lower_red,upper_red)
kernel = np.ones((5,5),np.uint8)
#腐蚀
erosion = cv2.erode(mask,kernel,iterations=1)
#膨胀
dilation = cv2.dilate(mask,kernel,iterations=1)
#开操作
opening = cv2.morphologyEx(mask,cv2.MORPH_OPEN,kernel)
#闭操作
closing = cv2.morphologyEx(mask,cv2.MORPH_CLOSE,kernel)
#显示
cv2.imshow('erosion',erosion)
cv2.waitKey(0)
cv2.imshow('dilation',dilation)
cv2.waitKey(0)
cv2.imshow('opening',opening)
cv2.waitKey(0)
cv2.imshow('closing',closing)
cv2.waitKey(0)
cv2.destroyAllWindows()
礼帽:开操作-原始
黑帽:原始-闭操作
均值滤波(减少图片的噪声):blur=cv2.blur(img,(3,3))
方框滤波:基本和均值一样,可以选择归一化
box=cv2.boxFilter(img,-1,(3,3),normalize=True)(ps:如果normailze为false可能会产生像素值月结的情况,如果像素值大于255,则直接取255)
高斯滤波:高斯滤波的卷积核里的数值是满足高斯分布,相当于更重视中间的
aussian=cv2.GuassianBlur(img,(3,3),1)
中值滤波:先当于取中值来代替