python opencv 帮我写一份代码 ,要求如下 假设img_test经过滤波后进行轮廓提取 假设提取后有有rect = cv2.minAreaRect(contour)、box = cv2.boxPoints(rect)、box = np.round(box).astype('int64') 通过box 有矩形A:left_point_x = np.min(box[:, 0])、right_point_x = np.max(box[:, 0])、top_point_y = np.min(box[:, 1])、bottom_point_y = np.max(box[:, 1]) 假设有点(x1、y1) 判断 x1是否在right_point_x与left_point_x之内 若不在 则将x1平移到离矩形A最近的一条边上 同理 判断y1是否在top_point_y与bottom_point_y之内 若不在 则将y1平移到x1平移之后所在的边上
时间: 2023-07-16 19:12:56 浏览: 148
好的,以下是 Python OpenCV 代码实现:
```python
import cv2
import numpy as np
# 假设img_test经过滤波后进行轮廓提取,contour为轮廓
rect = cv2.minAreaRect(contour)
box = cv2.boxPoints(rect)
box = np.round(box).astype('int64')
# 获取矩形的四个顶点坐标
left_point_x = np.min(box[:, 0])
right_point_x = np.max(box[:, 0])
top_point_y = np.min(box[:, 1])
bottom_point_y = np.max(box[:, 1])
# 假设有点(x1, y1)
x1 = 50
y1 = 100
# 判断x1是否在right_point_x与left_point_x之内
if x1 < left_point_x or x1 > right_point_x:
# 将x1平移到离矩形A最近的一条边上
if x1 < left_point_x:
x1 = left_point_x
else:
x1 = right_point_x
# 判断y1是否在top_point_y与bottom_point_y之内
if y1 < top_point_y or y1 > bottom_point_y:
# 将y1平移到x1平移之后所在的边上
if y1 < top_point_y:
y1 = top_point_y
else:
y1 = bottom_point_y - (bottom_point_y - y1)
# 打印结果
print("平移后的点坐标为:", x1, y1)
```
其中,示例中的点坐标是随便设定的,实际应用中需要根据实际情况获取。
阅读全文