Opencv中的坐标变换

第一次写博客

# 写博客

h, w, c = img.shape()

ResizeImg = cv2.resize(img, (w, h))

 

dim = [h, w]

dim = (batch, channal, h, w)

OpenCV中,视觉坐标转换通常涉及从图像坐标到世界坐标的映射。这个过程依赖于相机标定的结果,包括相机的内参矩阵(如焦距、主点等)和外参矩阵(旋转和平移向量),以及可能存在的畸变系数。以下是几种常见的视觉坐标转换方法及其应用场景: ### 图像坐标到世界坐标的映射 图像坐标到世界坐标的转换通常需要使用相机的内参和外参信息。在已知相机参数的情况下,可以通过反向投影将图像坐标转换为世界坐标。具体步骤如下: 1. **获取相机参数**:通过相机标定获取相机的内参矩阵 $ K $、畸变系数 $ D $、以及外参(旋转矩阵 $ R $ 和平移向量 $ t $)。 2. **反向投影**:利用这些参数将图像坐标转换为相机坐标,然后再转换为世界坐标。 在OpenCV中,可以使用 `cv2.undistortPoints` 函数来去除图像坐标的畸变,然后使用 `cv2.triangulatePoints` 或者结合 `cv2.solvePnP` 来计算世界坐标。 ```python import cv2 import numpy as np # 假设已经获取了相机内参和畸变系数 K = np.array([[1000, 0, 500], [0, 1000, 500], [0, 0, 1]], dtype=np.float32) D = np.array([0.0, 0.0, 0.0, 0.0], dtype=np.float32) # 图像坐标点 point_2d = np.array([[500, 500]], dtype=np.float32) # 去除畸变 point_2d_undistorted = cv2.undistortPoints(point_2d, K, D, P=K) # 假设已知外参 R 和 t R = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]], dtype=np.float32) t = np.array([0, 0, 0], dtype=np.float32) # 构造投影矩阵 P = np.hstack((R, t.reshape(3, 1))) projection_matrix = K @ P # 反向投影到世界坐标 point_3d_homogeneous = cv2.convertPointsToHomogeneous(point_2d_undistorted) point_3d_world = cv2.perspectiveTransform(point_3d_homogeneous, np.linalg.inv(projection_matrix)) print("世界坐标:", point_3d_world) ``` ### 相机标定与坐标转换 相机标定是实现图像坐标到世界坐标转换的关键步骤。通过标定可以获取相机的内参矩阵和畸变系数。通常使用棋盘格进行标定,并通过 `cv2.calibrateCamera` 函数计算标定参数[^2]。 ### 极坐标转换 在某些特殊应用中,如处理圆形图像或钟表图像,可以使用极坐标转换。OpenCV 提供了 `warpPolar` 函数来实现从笛卡尔坐标系到极坐标系的转换,这对于圆形特征的检测和处理非常有用[^4]。 ```python import cv2 import numpy as np # 读取图像 img = cv2.imread('circle_image.png', cv2.IMREAD_GRAYSCALE) # 定义转换参数 center = (img.shape[1] // 2, img.shape[0] // 2) # 中心点 max_radius = min(img.shape) // 2 # 最大半径 dsize = (360, max_radius) # 目标图像大小 # 极坐标转换 polar_img = cv2.warpPolar(img, dsize, center, max_radius, cv2.WARP_POLAR_LINEAR) # 显示结果 cv2.imshow('Polar Image', polar_img) cv2.waitKey(0) cv2.destroyAllWindows() ``` ### 应用场景 - **机器人导航**:在机器人视觉中,图像坐标到世界坐标的转换用于定位和路径规划。 - **三维重建**:通过多视角图像重建物体的三维模型。 - **增强现实**:将虚拟对象正确地叠加到现实世界的图像上。 - **工业检测**:在工业自动化中,用于精确测量和缺陷检测。 ### 总结 OpenCV 提供了多种工具来实现视觉坐标转换,从图像坐标到世界坐标的映射需要依赖相机标定的结果。通过 `cv2.undistortPoints` 和 `cv2.perspectiveTransform` 等函数可以实现这一转换。此外,极坐标转换在特定应用场景中也非常有用,能够简化图像处理任务。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值