用python实现获取房间图片中两个点在现实中的真实距离
时间: 2024-03-12 20:49:24 浏览: 68
要实现获取房间图片中两个点在现实中的真实距离,需要进行以下步骤:
1. 获取房间图片中的标定尺寸
在房间中放置一个已知的标定尺寸(例如1米长的棍子),并在房间图片中测量出该标定尺寸在像素上的长度,记录下来。这个标定尺寸的长度和像素长度的比例可以作为后续计算的基础。
2. 使用鼠标点击获取两个点的像素坐标
使用OpenCV的鼠标事件可以获取鼠标点击的坐标,代码如下:
```python
import cv2
def get_coordinate(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
print('x: {}, y: {}'.format(x, y))
img = cv2.imread('room.jpg')
cv2.imshow('room', img)
cv2.setMouseCallback('room', get_coordinate)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
该代码会在鼠标左键点击时输出像素坐标。
3. 计算两点之间的距离
使用获取到的两个点的像素坐标,以及标定尺寸的长度和像素长度的比例,可以计算出两点之间的真实距离,代码如下:
```python
import cv2
import math
# 标定尺寸的长度(单位:米)
SCALE_LENGTH = 1
# 标定尺寸在图片中的像素长度
SCALE_PIXELS = 100
def get_distance(x1, y1, x2, y2):
return math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2)
def get_coordinate(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
print('x: {}, y: {}'.format(x, y))
if len(param) == 2:
x1, y1 = param[0]
pixel_distance = get_distance(x1, y1, x, y)
real_distance = SCALE_LENGTH * pixel_distance / SCALE_PIXELS
print('distance: {:.2f}m'.format(real_distance))
param.append((x, y))
img = cv2.imread('room.jpg')
cv2.imshow('room', img)
cv2.setMouseCallback('room', get_coordinate, [])
cv2.waitKey(0)
cv2.destroyAllWindows()
```
该代码会在点击两个点时输出两点之间的真实距离。其中,`SCALE_LENGTH`为标定尺寸的长度,`SCALE_PIXELS`为标定尺寸在图片中的像素长度,需要根据实际情况进行修改。
阅读全文