问题描述
(我很抱歉以前没有问过这个问题,我找不到)。我试图确定与物理对象(在本例中为直角棱镜)和网络摄像头之间的距离。我尝试从大约8英寸的距离进行尝试,在这种距离下相机无法看到周围的环境,但是由于这不是该程序的用例,因此我决定增加距离。
我正在使用此公式确定该距离Z (distance to object) = (X / x) * F
,其中X =已知物体的大小,x =该物体的像素的大小,F =这是我计算出的相机校准点。
我以前说过的问题是,我似乎无法找出一种方法来过滤程序似乎找到的所有其他轮廓。看到图片,看看我在说什么。
from imutils import perspective
from imutils import contours
import numpy as np
import imutils
cam = cv2.VideoCapture(0)
running = True
while running:
rect,img = cam.read()
flip = cv2.flip(img,1)
buf1 = cv2.resize(flip,(720,540))
buf2 = cv2.cvtColor(buf1,cv2.COLOR_BGR2GRAY)
buf3 = cv2.GaussianBlur(buf2,(5,5),0)
rect2,buf4 = cv2.threshold(buf3,255,cv2.THRESH_BINARY + cv2.THRESH_OTSU)
buf5 = cv2.Canny(buf4,50,100)
buf6 = cv2.findContours(buf5.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(buf6)
for c in cnts:
orig = buf1.copy()
box = cv2.minAreaRect(c)
box = cv2.cv.BoxPoints(box) if imutils.is_cv2() else cv2.boxPoints(box)
box = np.array(box,dtype = "int")
box = perspective.order_points(box)
cv2.drawContours(buf1,[box.astype("int")],-1,(0,0),3)
for (x,y) in box:
cv2.circle(buf1,(int(x),int(y)),5,255),-1)
print(box)
# right = box[3]
# left = box[2]
#
# #print(left)
# #print(right)
# length = left[0] - right[0]
# #print(length)
# F = float(557.948717948718)
# Z = ((19.5 * 25.4) / length) * F
# print(Z)
cv2.imshow('frame',buf1)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cam.release()
cv2.destroyAllWindows()
这是我上面的代码。这是嘈杂图像的图片-> The noisy picture
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)