Я вынул лазер кривого этого изображения:лазерное обнаружение изогнуты линии с помощью OpenCV и питона
original image http://img4.hostingpics.net/thumbs/mini_367400simple21.png curve http://img4.hostingpics.net/thumbs/mini_646613curve.png
И теперь я пытаюсь получить набор точек (больше, тем лучше), которые находятся в середине этой кривой. Я попытался разбить изображение на вертикальные полосы, а затем обнаружить центр тяжести. Но он не вычисляет много очков, и это совсем не удовлетворительно!
img = cv2.Canny(img,50,150,apertureSize = 3)
sub = 100
step=int(img.shape[1]/sub)
centroid=[]
for i in range(sub):
x0= i*step
x1=(i+1)*step-1
temp = img[:,x0:x1]
hierarchy,contours,_ = cv2.findContours(temp, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
if contours <> []:
for i in contours :
M = cv2.moments(i)
if M['m00'] <> 0:
centroid.append((x0+int(M['m10']/M['m00']),(int(M['m01']/M['m00']))))
Я также попытался cv2.fitLine()
, но это было не удовлетворителен. Как я могу эффективно определить точки в середине этой кривой? С уважением.
Описание и сценарий MATLAB для 3D-сканера, как вы хотите (я полагаю). http://www.instructables.com/id/3-D-Laser-Scanner/ –
Спасибо, но я не использую точно такой же процесс. Я хотел бы просто найти что-то вроде среднего для этой густой красной кривой. Есть ли способ сделать это? – Chr35