学习笔记:单目摄像头对已知物体尺寸的测距(1)

因为手机摄像头是变焦的。所以这只是初步,很多东西要改,而且环境简单。。
学习笔记:单目摄像头对已知物体尺寸的测距(1)_第1张图片
实际上这是一个距离摄像头10cm,尺寸为5cm×3cm的长方形

import cv2 as cv
import numpy as np
img=cv.imread('10cm.png')
#改变尺寸,因为摄像头变焦..只能弄着玩玩的
height, width = img.shape[:2]
size = (640, 480)
imgnew = cv.resize(img, size, interpolation=cv.INTER_AREA)
#灰度处理
gray=cv.cvtColor(imgnew,cv.COLOR_BGR2GRAY)
#预处理 实际复杂环境要添加

#二值化
ret,dst=cv.threshold(gray,100,255,cv.THRESH_BINARY)
#边缘检测
edges=cv.Canny(dst,50,50)




#直线检测+裁剪
listy=[]
listx=[]
lines = cv.HoughLinesP(edges,1,np.pi/180,50,minLineLength=20,maxLineGap=10)
lines1 = lines[:,0,:]
for x1,y1,x2,y2 in lines1[:]:
    cv.line(img,(x1,y1),(x2,y2),(255,0,0),1)
    listy.append(y1)
    listx.append(x1)
    listy.append(y2)
    listx.append(x2)
miny=800
maxy=0
for i in range(len(listy)-1):
    a=listy[i]
    if a < miny :
        miny =a
    if a >maxy :
        maxy =a
minx=800
maxx=0
for i in range(len(listx)-1):
    b=listx[i]
    if b < minx :
        minx =b
    if b >maxx :
        maxx =b
edgescaijian=edges[miny:maxy,minx:maxx]
x0=maxy-miny
y0=maxx-minx
distance=8.45*5*x0/(3*y0)
distance="%f"%distance
cm="cm"
distance=distance+cm
print(distance)

你可能感兴趣的:(学习笔记:单目摄像头对已知物体尺寸的测距(1))