我有一张图像:
然后我使用以下代码生成了阈值图像。
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=~maskres = cv2.bitwise_and(img,img,mask = ~mask)cv2.imshow('Masked',mask)cv2.imshow('Result',res)
然后是以下图像(蒙版):
和(结果):
现在我想做的就是将原始图像中的黑色像素设为零,并提取大小为32×32像素或更大的图像块。
回答:
使用cv2.findContours()来查找蒙版图像中白色块的边界。每个边界都会以二维点的列表形式返回。
使用cv2.boundingRect()获取每个块的宽度和高度,并据此进行过滤。你也可以使用cv2.minAreaRect()或cv2.contourArea()来根据块的实际面积进行过滤。
https://docs.opencv.org/2.4/modules/imgproc/doc/structural_analysis_and_shape_descriptors.htm
一旦确定了哪些块应被丢弃,就使用cv2.fillPoly()在彩色图像上将这些块覆盖为黑色。