Попытка рассчитать фокусное расстояние объекта с известной шириной и расстоянием (3 фото). ] Центр находится не в центре каждого цикла, поэтому фокусное расстояние слишком сильно отличается от каждого цикла.
(Черная точка на каждой фотографии - это то, что кажется центром)
6 дюймов от камеры
![6 inches from camera](https://i.stack.imgur.com/y34j0.jpg)
12 дюймов
![12 inches](https://i.stack.imgur.com/ps449.jpg)
18 дюймов
![18 inches](https://i.stack.imgur.com/6ijsH.jpg)
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
Должен ли я просто усреднить их?