用opencv写一个平行直线测距的python代码
时间: 2023-05-23 12:06:14 浏览: 48
A: 下面是可以实现平行直线测距的Python代码,基于OpenCV库:
```python
import cv2
import numpy as np
# 读入图片
img = cv2.imread('lines.jpg')
# 灰度图像
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 二值化处理,阈值为150
edges = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)[1]
# 寻找轮廓
contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
# 计算轮廓中心
for c in contours:
# 过滤掉小的轮廓
if cv2.contourArea(c) > 500:
# 最小矩形包含轮廓
rect = cv2.minAreaRect(c)
box = cv2.boxPoints(rect)
box = np.int0(box)
# 绘制矩形框
cv2.drawContours(img,[box],0,(0,0,255),2)
# 计算矩形框的长度和宽度
width = np.sqrt((box[1][0]-box[0][0])**2 + (box[1][1]-box[0][1])**2)
height = np.sqrt((box[2][0]-box[1][0])**2 + (box[2][1]-box[1][1])**2)
# 判断矩形框的角度,获取两个平行直线之间的距离
if width > height:
dis = round(height,2)
else:
dis = round(width,2)
# 输出距离信息
cv2.putText(img, "distance: "+str(dis)+" pixels", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
# 显示结果
cv2.imshow("Image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
该代码中,我们首先用OpenCV读入图片,然后将其转换为灰度图像,并对灰度图像进行二值化处理。接下来寻找轮廓并计算轮廓中心。对于大于一定面积的轮廓,我们使用最小矩形包含轮廓,并绘制矩形框。然后计算矩形框的长度和宽度,并根据矩形框的角度判断两个平行直线之间的距离。最后将距离信息输出到图片上,并将结果图片显示出来。