Контурный центр не точный - PullRequest
0 голосов
/ 09 мая 2019

Попытка рассчитать фокусное расстояние объекта с известной шириной и расстоянием (3 фото). ] Центр находится не в центре каждого цикла, поэтому фокусное расстояние слишком сильно отличается от каждого цикла. (Черная точка на каждой фотографии - это то, что кажется центром)

6 дюймов от камеры

6 inches from camera

12 дюймов

12 inches

18 дюймов

18 inches

import cv2
import imutils
import os

IMAGE_FOLDER='../Images/PP'
known_width=12.7 #ball known to have 12.7mm diameter
for file in os.listdir(IMAGE_FOLDER):
    if file.endswith('.JPG'):
        actual_distance=int(file.split(".JPG")[0])*25.4 #25.4mm/inch

        src=cv2.imread(os.path.join(IMAGE_FOLDER,file),0)
        src=imutils.resize(src,height=640,width=480)
        blurred=cv2.GaussianBlur(src,(5,5),0)

        edges=cv2.Canny(blurred,100,200)

        cnts=cv2.findContours(edges.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
        cnts=imutils.grab_contours(cnts)
        center=None

        if len(cnts)>0:
            c=max(cnts,key=cv2.contourArea)
            ((x,y),radius)=cv2.minEnclosingCircle(c)
            M=cv2.moments(c)
            center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))

            if radius>10:
                cv2.circle(src,(int(x),int(y)),int(radius),(0,255,255),2)
                cv2.circle(src,center,5,(0,0,255),-1)

        focal=(radius*actual_distance)/(known_width)
        print "image: %s \nfocal point: %f"%(file,focal)
        cv2.imshow(file,src)
        cv2.waitKey(0)

        outPath=os.path.join("../../",file)
        cv2.imwrite(outPath,src)

Я ожидал, что рассчитанные фокусные расстояния все будут одинаковыми, но вместо этого получил:

изображение: 12.JPG фокус: 2097.292053

изображение: 18.JPG координатор: 2341.189545

изображение: 6.JPG координационный центр: 1848,595276

Должен ли я просто усреднить их?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...