功能:模拟VisionPro找线工具,利用基尔霍夫直线函数在多个倾斜矩形ROI中找到小线段的中点,再利用拟线函数拟合多个线段的中点得到直线。
在某个倾斜矩形的ROI中得到了该点相对于ROI的坐标,倾斜矩形的信息已知,怎么能把这个点的坐标转换到原图中的坐标呢?
Xo=Xr+ROI.left
Yo=Yr+ROI.top
你相对于ROI的坐标,是相对RotatedRect的左上角还是中心点坐标?而且使用opencv的话,你的ROI是RotatedRect没错,但是你需要变成一张Mat才能在霍夫直线里面用吧,那么你的坐标应该是相对于这张Mat的左上角而不是RotatedRect的,此时就看你怎么拿到这张Mat了,你是用的RotatedRect的boundingBox还是用什么方法?举个例子来说
望采纳。可以使用OpenCV的函数cv2.warpAffine来转换坐标。cv2.warpAffine函数的作用是对图像进行仿射变换,其中参数src为输入图像,dst为输出图像,M为变换矩阵。
你可以设置变换矩阵M为倾斜矩形的逆变换矩阵,然后调用cv2.warpAffine函数,将倾斜矩形ROI中的点的坐标转换为原图src中的坐标。
import cv2
import numpy as np
# 读入原图src
src = cv2.imread('src.jpg')
# 设置倾斜矩形的逆变换矩阵M
M = np.array([[1, 0, x], [0, 1, y]])
# 对倾斜矩形中的点(x0, y0)进行逆变换
dst = cv2.warpAffine(src, M, src.shape[:2])
# 将倾斜矩形ROI中的点(x0, y0)的坐标转换为原图src中的坐标(x1, y1)
x1 = x0 + x
y1 = y0 + y
# 输出转换后的结果
print('(x1, y1) = (%d, %d)' % (x1, y1))