我有一个类似于下图(左侧)的图像:
我只想提取右侧的红色像素:属于 1px 垂直线的像素,但不提取任何较粗的线或具有超过 1 个相邻黑色像素的其他区域。图像是双色的。
到目前为止,我已经尝试了一个OPEN
具有垂直(10px,这是为了我的目的)和水平内核的形态并采取了差异,但这需要一个尴尬的转变并留下一些“斑点”:
vertical_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 10))
vertical_mask1 = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, vertical_kernel,
iterations=1)
horz_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2, 1))
horz_mask = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, horz_kernel,
iterations=1)
M = np.float32([[1,0,-1],[0,1,1]])
rows, cols = horz_mask.shape
vertical_mask = cv2.warpAffine(horz_mask, M, (cols, rows))
result = cv2.bitwise_and(thresh, cv2.bitwise_not(horz_mask))
隔离 1px 线(并且只有 1px 线)的正确方法是什么?
在一般情况下,对于其他内核,这个问题是:如何找到图像中位于内核“适合内部”的区域中的所有像素(然后减法以获得我想要的结果)?