[英]How to find Angle of Different Edges in an Image
這是以下方法的可能性:
#!/usr/bin/env python3
import cv2
# Load image as greyscale
im = cv2.imread('trails.png', cv2.IMREAD_GRAYSCALE)
# Threshold for just the brightest things
_, thr = cv2.threshold(im, 192,255,type=cv2.THRESH_BINARY)
# Find contours
contours,hierarchy = cv2.findContours(thr, 1, 2)
# Iterate over contours
for cnt in contours:
# Get area of blob
area = cv2.contourArea(cnt)
# Only work with decent size blobs - ignore smallest ones
if area > 8:
center, size, angle = cv2.minAreaRect(cnt)
print(f'Area: {area}, angle: {angle}')
我得到這些結果:
Area: 10.5, angle: 11.309932708740234
Area: 11.5, angle: 18.43494987487793
Area: 12.0, angle: 14.03624439239502
Area: 74.5, angle: 9.462322235107422
Area: 9.5, angle: 14.03624439239502
Area: 35.0, angle: 11.309932708740234
Area: 30.5, angle: 18.434947967529297
Area: 11.5, angle: 18.43494987487793
Area: 16.0, angle: 18.43494987487793
Area: 9.0, angle: 11.309932708740234
Area: 27.0, angle: 26.56505012512207
Area: 15.5, angle: 21.801410675048828
Area: 9.0, angle: 14.03624439239502
Area: 10.5, angle: 11.309932708740234
Area: 16.0, angle: 18.43494987487793
Area: 32.0, angle: 14.03624439239502
Area: 14.0, angle: 14.03624439239502
Area: 46.0, angle: 11.309932708740234
Area: 25.0, angle: 15.945395469665527
Area: 14.0, angle: 14.03624439239502
Area: 18.0, angle: 90.0
Area: 24.5, angle: 11.309932708740234
Area: 10.0, angle: 14.03624439239502
Area: 36.0, angle: 9.462322235107422
Area: 16.5, angle: 18.43494987487793
Area: 23.5, angle: 11.309932708740234
Area: 11.0, angle: 18.43494987487793
Area: 11.5, angle: 14.03624439239502
Area: 16.5, angle: 14.03624439239502
Area: 12.0, angle: 14.03624439239502
Area: 18.0, angle: 18.43494987487793
Area: 11.5, angle: 14.03624439239502
Area: 23.5, angle: 11.309932708740234
Area: 14.0, angle: 14.03624439239502
Area: 28.0, angle: 11.309932708740234
Area: 18.0, angle: 18.434947967529297
Area: 16.0, angle: 15.945395469665527
Area: 9.0, angle: 15.945395469665527
Area: 10.0, angle: 14.03624439239502
Area: 10.5, angle: 14.03624439239502
Area: 11.0, angle: 14.03624439239502
Area: 8.5, angle: 14.03624439239502
Area: 15.0, angle: 18.43494987487793
Area: 19.0, angle: 14.03624439239502
Area: 20.5, angle: 14.03624439239502
Area: 37.5, angle: 90.0
Area: 34.5, angle: 90.0
Area: 11.5, angle: 14.03624439239502
Area: 27.0, angle: 14.03624439239502
Area: 22.5, angle: 90.0
Area: 8.5, angle: 18.434947967529297
Area: 13.0, angle: 14.03624439239502
Area: 10.0, angle: 15.945394515991211
Area: 12.0, angle: 14.03624439239502
Area: 25.0, angle: 14.03624439239502
Area: 16.0, angle: 90.0
Area: 9.0, angle: 14.03624439239502
我想你可以進一步完善假設和參數,並進一步平滑或統計分析角度 - 但它們似乎平均在 14 度左右
我只是猜測 192 的閾值才能得到一些合理的東西。 調這個。
我只是從稀薄的空氣中提取了最小面積為 8 的區域,這樣我只看到大小合適的斑點,而忽略了微小的、無方向的斑點。 調這個。
恕我直言,一個選項可以將每個條紋轉換為二維向量,並計算平均 angular 系數
為了獲得線條,我建議查看 Hough 線條方法https://docs.opencv.org/3.4/d9/db0/tutorial_hough_lines.html
通過一些圖像清理和微調 function 參數(尤其是最小長度和最大間隙值),您應該能夠獲得這些向量
然后,為每個向量計算傾角 (y2-y1) / (x2-x1),取平均值,這里是 go
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.