我試圖創建一個Python腳本來檢測一個行的孔,結束和開始。我認爲openCV會很好實現這一點。使用openCV檢測線的孔,結束和開始?
因此,舉例來說一切開始與此圖像:
最後我想實現的是:
於是我開始導入圖像到Python和將其轉換爲灰度。現在我想通過使用goodFeaturesToTrack()
方法來追蹤這些洞。它通常用於查找圖像中的角點。
但是,這並沒有很好的工作,因爲在那之後,腳本知道這些點,但它不知道一個點是來自一個洞還是它是該線的開始或結束。另一個問題是,如果我使用另一個圖像,該方法會檢測更多的點,而不僅僅是線條的開始和結束。
這裏是我的全部代碼來了解我的問題好一點:
import cv2
import numpy as np
import matplotlib.pyplot as plt
# lodes in img
img = cv2.imread('png1.png', cv2.IMREAD_COLOR)
img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
corners = cv2.goodFeaturesToTrack(img_gray, 200, 0.05, 10)
for corner in corners:
x, y = corner.ravel()
cv2.circle(img, (x,y), 7, (255,255,0), -1)
cv2.imshow('img',img)
我也沒辦法來解決這個問題。
您可以比較每個項目的x-y座標與其他每個項目的x-y,如果它們落在特定的近似閾值內,則認爲它們是空洞,否則將它們視爲開始/結束線。 – Aphire
GoodFeaturesToTrack這裏不是一個好的選擇。我會沿着這個做一些事情:1)分割每個blob('findContours')。你會有每個細分市場。 2)找到每個片段的起點和終點(這可能很棘手)3)如果兩個端點比給定的閾值更近,那麼就有一個_hole_。 4)剩下的兩個端點是開始和結束。 – Miki
好的。謝謝!我做到了。現在我需要獲得所有的關鍵點。我需要一個roi嗎?還是有更快的方法? – RunningRails