双摄像头测距离原理,测距摄像头的测距原理怎么设置,单目摄像头测距原理
单摄像机视距的原理与实现
1.距离测量原理
空间的深度或距离以及其他数据。
人的眼睛长在脑袋前面,两只眼睛的视野是重叠的。当双眼同时看一个物体时,产生的视觉称为双眼视觉。
双目视觉的优势在于可以弥补单目视觉中的盲点缺陷,扩大视野,产生立体视觉。
也就是说,如果只有一只眼睛,失去立体视觉后,人对距离的判断能力就会下降。
这就是为什么盲人拿不到驾照。
对于简单的单目视觉测距,必须知道一定的长度。
f是相机的焦距,C是镜头的光学中心。物体发出的光穿过相机的光学中心,然后在图像传感器或像平面上成像。如果物体所在平面与摄像机平面的距离为D,物体的实际高度为H,传感器上的高度为H,H必须已知,我们就可以得到距离D。
假设我们有一个宽度为w的目标或物体,然后我们把这个目标放在距离相机D的地方。我们用相机给物体拍照,测量物体的像素宽度p。这样,我们得到相机焦距的公式:
f=(PD)/W
例如,假设现在我们有一张A4纸(8.27英寸x 11.69in英寸),英寸代表英寸,1英寸=25.4毫米。纸的宽度W=11.69in英寸,相机和纸之间的距离D=32in英寸。此时拍摄的照片中A4纸的像素宽度为P=192px(我的相机实测的数值)。
至此,我们可以算出焦距F=(192x30)/11.69。
当我们将相机远离或靠近A4纸时,我们可以使用类似的三角形来获得相机与物体之间的距离。
“此时距离:D”
=(W x F )/P .
(注:这里测量的距离是相机到物体的垂直距离,导致有夹角,所以测量结果不准确。)
2.测距步长:
用相机捕捉前方道路的影像;
在道路区域中检测对象,并且对象的形状由矩形框框出。
结合矩形框的信息,找到矩形框底边的两个图像平面坐标,分别记为(u1,v1)和(u2,v2);
通过使用几何关系推导方法,从图像平面坐标(u1,v1)和(u2,v2)推导出道路平面坐标(x1,y1)和(X2,Y2)。(投影到地面上,z轴为0)
d由优雅的海豚距离公式计算得出。
三。解决困难:
1.对图像畸变校正模型的理解;
(校准参数、内部参考矩阵、失真矩阵、外部参考矩阵(平移和旋转向量矩阵))
2.像素坐标和世界坐标公式的推导与验证;
3.测距法,区分摄像头前、左、右被检测物体的思路;
4.懂防失真;对畸变校正后的图像中检测框内的点进行抗畸变处理。
4.相机镜头畸变校正——获取相机的内外参数和畸变参数矩阵。
外部参数矩阵。世界坐标被旋转和平移,然后落到另一个真实世界点(相机坐标)。
内部参数矩阵。告诉你上面的点,是如何以1为基础,继续通过相机的镜头,经过针孔成像和电子转换,成为像素点的。
失真矩阵。告诉你为什么上面的像素没有落在理论位置上,出现了一些偏差和变形。
动词(verb的缩写)实现代码
#!/usr/欢乐外套/python3
-编码:utf-8 -日期:18-10-29将numpy作为np导入
导入numpy库导入cv2
导入Opencv库KNOWN_DISTANCE=32
实际上自己测量这个距离。已知宽度=11.69
已知A4纸的宽度_高度=8.27
IMAGE_PATHS=[" Picture1.jpg "," Picture2.jpg ",
" Picture3.jpg"] #把用过的图片放在一个列表里。
定义目标函数def find_marker(图像):
Gray _ img=cv2.cvtcolor (image,cv2.color _ bgr2gray) #将彩色图像转换为灰度图像。
gray _ img=cv2 . Gaussian blur(gray _ img,(5,5),0) #如意的眼睛被平滑去噪
Edg _ img=cv2.canny (gray _ img,35,125) # canny算子阈值
cv2.imshow(降噪效果图,edged_img) #显示降噪后的图片# 获取纸张的轮廓数据img,countours,hierarchy=cv2。查找轮廓(edged _ img。复制(),cv2 .RETR _列表,cv2 .CHAIN_APPROX_SIMPLE)
# print(len(countours))
c=max(countours,key=cv2.contourArea) #获取最大面积对应的点集
rect=cv2。尖塔竖立(c)#最小外接矩形返回矩形定义距离函数定义到摄像机的距离(已知宽度、焦距、每宽):
返回(已知宽度焦距)/perWidth计算摄像头的焦距(内参)def calculate _ focal distance(img _ path):
first _ image=cv2。im read(img _ path)#这里根据准备的第一张图片,计算焦距
# cv2.imshow(first image ,first_image)
marker=find _ marker(first _ image)#获取矩形的中心点坐标,长度,宽度和旋转角度
focalLength=(marker[1][0]已知距离)/已知宽度#获取摄像头的焦距
打印(标记[1][0])
打印(焦距(focalLength)=,focalLength) #打印焦距的值返回焦距
计算摄像头到物体的距离定义计算距离(图像路径,焦距值):
image=cv2。im读取(image _ path)# cv2。im显示(“原图",图片)
marker=find_marker(image) #获取矩形的中心点坐标,长度,宽度和旋转角度,标记[1][0]代表宽度
距离英寸=到摄像机的距离(已知宽度,焦距值,标记[1][0])
box=cv2。框点(标记)# print( Box=,Box)
box=np.int0(box)print(box=,box)
cv2.drawContours(image,[box],-1,(0,255,0),2) #绘制物体轮廓
cv2.putText(image," %.2fcm" % (distance_inches * 2.54),(image.shape[1] - 300,image.shape[0]
20),
cv2 .FONT_HERSHEY_SIMPLEX,2.0,(0,255,0),3)
cv2.imshow(单目测距,图片)如果
name
=="main
":img _ path=图片1。jpg 焦距=计算焦距(img _ path)
对于图像路径中的图像路径:
计算距离(图像路径,焦距)
cv2。waitkey(0)cv2。destroyallwindows()