簡體   English   中英

如何找到兩個輪廓之間的距離

[英]How to find distance between two contours

我正在一個項目中尋找金屬環上的缺陷零件。我成功地找到了表面上的缺陷零件,但是我無法檢測到金屬環內表面上的突起。

我本來想使用內外表面之間的距離來確定誤差,但是我不知道如何計算兩個輪廓之間的距離。

sucsess, frame = capture.read()

kernel = np.ones((1,1),np.uint8)
blur = cv2.bilateralFilter(frame,6,140,160)
threshold = cv2.adaptiveThreshold(blur,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,21,16)
closing = cv2.morphologyEx(threshold,cv2.MORPH_CLOSE,kernel)
erosion = cv2.erode(closing,kernel,iterations =0)
contours, hierarchy = cv2.findContours(erosion,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
            area = cv2.contourArea(cnt)
            if area > 72000 and area < 80000:
                cv2.drawContours(frame,cnt,-1,(0,0,0),3)
                for cnt2 in contours:
                    area2 = cv2.contourArea(cnt2)
                    if area2 > 30 and area2 < 200:
                        cv2.drawContours(frame,cnt2,-1,(0,0,0),3)
cv2.imshow("frame",frame)
cv2.imshow("Erosion",erosion)
cv2.waitKey(0)

這是我的代碼。 第一幅圖像是我正在尋找的對象,第二幅圖像是腐蝕的輸出。

在此處輸入圖片說明

在此處輸入圖片說明

我的主要問題是我無法檢測到內半徑內的任何突起。

歡迎任何建議和幫助。

沿中心光線測量

我本來想使用內外表面之間的距離來確定誤差,但是我不知道如何計算兩個輪廓之間的距離。

一種方法是同時獲取兩個輪廓並計算質心,從而為您提供標稱的中心點。 然后從這一點開始,將光線投射出360度,並計算與內部和外部輪廓的相交點。 (例如,以歐幾里德距離為最近的點。)然后,在內表面和外表面上都有兩個相應的半徑,因此可以從外表面減去內表面來獲得環的厚度。 使用與您需要的精度成比例的角度增量來全面地進行計算。 厚度的標准偏差始終是突起的量度(數字越小越好!)。

我的主要問題是我無法檢測到內半徑內的任何突起。

如果僅對內半徑感興趣,則另一種方法是從內表面獲取提取的輪廓,然后再次計算質心以找到名義參考點。 取從該中心到輪廓上每個點的平均距離,即可得到理想的擬合圓。 計算從該理想圓到實際輪廓上每個最近點的距離,這可以使您測量出擾動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM