[英]How to find the distance between two concentric contours, for different angles?
[英]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.