OpenCV如何计算ROI与原图src的位置关系

功能:模拟VisionPro找线工具,利用基尔霍夫直线函数在多个倾斜矩形ROI中找到小线段的中点,再利用拟线函数拟合多个线段的中点得到直线。

在某个倾斜矩形的ROI中得到了该点相对于ROI的坐标,倾斜矩形的信息已知,怎么能把这个点的坐标转换到原图中的坐标呢?

Xo=Xr+ROI.left
Yo=Yr+ROI.top

你相对于ROI的坐标,是相对RotatedRect的左上角还是中心点坐标?而且使用opencv的话,你的ROI是RotatedRect没错,但是你需要变成一张Mat才能在霍夫直线里面用吧,那么你的坐标应该是相对于这张Mat的左上角而不是RotatedRect的,此时就看你怎么拿到这张Mat了,你是用的RotatedRect的boundingBox还是用什么方法?举个例子来说

img


你就算是旋转矩形,但是你计算的时候是用蓝色框的Mat计算的,那你的结果应该是加上这个蓝色框在原图中的左上角,你抠这个蓝色框区域的时候用的Rect的x和y偏移加上相对的就是在原图中的位置了。

望采纳。可以使用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))