我正在尝试使用opencv_python
查找下方的红线的坐标。
我已经找到了这条红线的轮廓和所有坐标。但是我只需要下部红线的坐标,而不需要封闭的灰色区域上方的红线。
def find_drawContours(path):
src = cv2.imread(path)
# cv2.imshow('input', src)
src = cv2.GaussianBlur(src, (3,3), 0)
# cv2.imshow('', src)
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 0, 255, cv2.TH
# cv2.imshow('binary', binary)
image, contours, hierachy = cv2.findContours(bin
for i in range(len(contours)):
mm = cv2.moments(contours[i])
m00 = mm['m00']
m10 = mm['m10']
m01 = mm['m01']
cx = np.int(m10/m00)
cy = np.int(m01/m00)
(x, y), (a, b), degree = cv2.fitEllipse(cont
cv2.circle(src, (cx, cy), 2, (0,0,255), -1,
cv2.drawContours(src, contours, i, (0, 0, 25
pix_list = []
for i in range(len(contours[0])):
a = contours[0][i]
pix_list.append(a[0])
pix_array = np.array(pix_list)
print(min(pix_array[...,0]))
# cv2.imwrite('img/res.contour.jpg',src)
答案 0 :(得分:0)
我在图像上看到一个分散的红点,为了使以下技术起作用,我将使用膨胀和腐蚀操作将其消除。清理之后,我会:
points_on_lower_line[]
将具有所有属于较低红线的点。您可以通过确保所有点都是4连接来进一步清理。 由于已经存储了轮廓点,因此您甚至不必绘制轮廓并扫描图像中的红色像素。您可以按点的x坐标对轮廓列表进行排序,并通过检查是否只有两个点具有相同的x坐标并存储较低的点(较高的y坐标)来过滤列表。结果列表将包含下部红线的点。
您也可以使用集合来避免对轮廓点进行排序:
points_on_lower_line