激光测距仪网络摄像头DIY Python

时间:2015-07-17 15:06:36

标签: python editing

在网上搜索DIY激光测距仪网络摄像头后;我发现了一个很酷的项目,可以找到激光的距离,单位为厘米。我想知道是否有人可以帮我改变一些代码行,以便它可以用小数来测量码的距离(像分数一样)。 这是我找到webcam laser rangefinder

网站的链接

我对三角学一无所知,除了我记得的高中代数和几何学之外我什么都不知道。换句话说,我不理解这个链接正在谈论的数学;这就是为什么,我要求有人向我展示一个例子,如果用码而不是厘米来测量代码会是什么样子。先谢谢你。

这是代码

     ## program written by Shane Ormonde 7th sept 2013
     ## updated on 25th January 2014
     ## calculates the distance of a red dot in the field of view of the webcam.

    import cv2
    from numpy import *
    import math

    #variables
    loop = 1

    dot_dist = 0

    cv2.namedWindow("preview")
    vc = cv2.VideoCapture(1)



    if vc.isOpened(): # try to get the first frame
    rval, frame = vc.read()

    else:
            rval = False
     #print "failed to open webcam"


    if rval == 1 :

           while loop == 1:
        cv2.imshow("preview", frame)
        rval, frame = vc.read()
        key = cv2.waitKey(20)
        if key == 27: # exit on ESC
            loop = 0
        num = (frame[...,...,2] > 236)
        xy_val =  num.nonzero()

        y_val = median(xy_val[0])
        x_val = median(xy_val[1])

        dist = ((x_val - 320)**2 + (y_val - 240)**2 )**0.5 # distance of dot from center pixel
        dist = abs(x_val - 320) # distance of dot from center x_axis only

        print " dist from center pixel is " + str(dist) 

        # work out distance using D = h/tan(theta)

        theta =0.0011450*dist + 0.0154         
        tan_theta = math.tan(theta)



        if tan_theta > 0: # bit of error checking
            obj_dist =  int(5.33 / tan_theta)


        print "\033[12;0H" + "the dot is " + str(obj_dist) + "cm  away"
        elif rval == 0:
          print " webcam error "

1 个答案:

答案 0 :(得分:2)

假设码=厘米* 0.010936

更改此块:

if tan_theta > 0: # bit of error checking
    obj_dist =  int(5.33 / tan_theta)

对此:

if tan_theta > 0: # bit of error checking
    obj_dist =  int(5.33 / tan_theta)
    #convert from centimeters to yards
    obj_dist = obj_dist * 0.010936

如果我们看一下它告诉我们点的距离的部分,我们会看到行print "\033[12;0H" + "the dot is " + str(obj_dist) + "cm away"。这告诉我们距离存储在变量obj_dist中。所以我回顾一下代码,了解obj_dist是如何得到它的价值的。引用的唯一其他时间obj_dist位于第obj_dist = int(5.33 / tan_theta)行。查看该行的另一种方法是obj_dist = centimters_away。所以要获得码数,我们所要做的就是添加一条将obj_dist从厘米转换为码的线,这就是我所做的。