我想使用 python 的 opencv 分割大小为 32x32px 或更大的补丁
I want segment the patches of size 32x32px or more using python's opencv
我这里有一张图片:
然后我使用下面的代码生成了阈值图像。
img = cv2.imread('Image_Original.jpg')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
lower_gr = np.array([40,0,0])
upper_gr = np.array([90,255,255])
mask = cv2.inRange(hsv,lower_gr,upper_gr)
mask=~mask
res = cv2.bitwise_and(img,img,mask = ~mask)
cv2.imshow('Masked',mask)
cv2.imshow('Result',res)
然后是下面的图片(蒙版):
和(结果):
现在我想要的是通过将黑色像素设为零来移除黑色像素(仅从原始图像)并且我只想提取大小为 32x32px 或更大的补丁。
使用 cv2.findContours() 查找蒙版图像中白色块的边界。
每个边界都作为二维点列表返回。
使用 cv2.boundingRect() 获取每个补丁的 width/height 并进行相应的过滤。
您还可以使用 cv2.minAreaRect() 或 cv2.contourArea() 根据补丁的实际面积进行过滤。
https://docs.opencv.org/2.4/modules/imgproc/doc/structural_analysis_and_shape_descriptors.htm
一旦您确定了应该丢弃哪些补丁,使用 cv2.fillPoly() 在彩色图像上用黑色覆盖它们。
我这里有一张图片:
然后我使用下面的代码生成了阈值图像。
img = cv2.imread('Image_Original.jpg')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
lower_gr = np.array([40,0,0])
upper_gr = np.array([90,255,255])
mask = cv2.inRange(hsv,lower_gr,upper_gr)
mask=~mask
res = cv2.bitwise_and(img,img,mask = ~mask)
cv2.imshow('Masked',mask)
cv2.imshow('Result',res)
然后是下面的图片(蒙版):
和(结果):
现在我想要的是通过将黑色像素设为零来移除黑色像素(仅从原始图像)并且我只想提取大小为 32x32px 或更大的补丁。
使用 cv2.findContours() 查找蒙版图像中白色块的边界。 每个边界都作为二维点列表返回。
使用 cv2.boundingRect() 获取每个补丁的 width/height 并进行相应的过滤。 您还可以使用 cv2.minAreaRect() 或 cv2.contourArea() 根据补丁的实际面积进行过滤。
https://docs.opencv.org/2.4/modules/imgproc/doc/structural_analysis_and_shape_descriptors.htm
一旦您确定了应该丢弃哪些补丁,使用 cv2.fillPoly() 在彩色图像上用黑色覆盖它们。