Python 如何检测图像中最右边的线条

Python 如何检测图像中最右边的线条,python,image,opencv,image-processing,Python,Image,Opencv,Image Processing,我在图片中看到了以下输出。我找到了图像中最大的物体,但我需要正确的线条 ret, thresh = cv2.threshold(imgGray, 100, 255, 1) cnts = cv2.findContours(threshh.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) cnts = imutils.grab_contours(cnts) c = max(cnts, key=cv2.contourArea) extRight = tup

我在图片中看到了以下输出。我找到了图像中最大的物体,但我需要正确的线条

ret, thresh = cv2.threshold(imgGray, 100, 255, 1)
cnts = cv2.findContours(threshh.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
c = max(cnts, key=cv2.contourArea)
extRight = tuple(c[c[:, :, 0].argmax()][0]) # sağ taraf
cv2.circle(img, (extRight[0], extRight[1]+yx), 6, (0, 0, 255), -1)


将我的评论转移到一个答案:总是选择最厚轮廓的原因是因为线
c=max(cnts,key=cv2.contourArea)
。相反,请尝试计算每个组件的质心并选择最右边的一个

可以使用“矩()”函数计算轮廓的质心:


对每个轮廓进行此计算,并选择最大的一个
cx

您是如何尝试解决此问题的?轮廓方法,我想根据坐标信息放置一个点,以最准确的分数作为参考。但我键入的代码每次都会找到最厚的轮廓,很抱歉我不擅长英语。之所以总是选择最厚的轮廓,是因为线条
c=max(cnts,key=cv2.contourArea)
。相反,请尝试计算每个组件的质心并选择最右边的一个。
M = cv.moments(cnt)
cx = int(M['m10']/M['m00'])
cy = int(M['m01']/M['m00'])