gpt4 book ai didi

c++ - 使用棋盘的 OpenCV 变换

转载 作者:可可西里 更新时间:2023-11-01 18:16:27 25 4
gpt4 key购买 nike

我才刚刚开始尝试使用 OpenCV 一点点。我有一个固定位置的 LCD 设置,我想从图像中提取屏幕上显示的内容。我见过用于校准相机的棋盘图案,但它似乎是用来消除图像失真的,这并不是我想要做的。

我想我会在 LCD 上显示棋盘,然后计算出将 LCD 图像转换为直接在头顶上方裁剪后的棋盘理想 View 所需的变换。然后我会存储转换,更改 LCD 显示的内容,拍照,执行相同的转换,并获得当前显示内容的理想 View 。

我想知道这听起来是不是个好主意?有没有更简单的方法来实现我想要做的事情?关于我应该使用哪些函数来确定转换、执行转换、存储转换(也许只是将转换矩阵保存在内存中或将它们写入文件)等的任何提示?

最佳答案

我不确定我是否正确理解了您要尝试做的一切,但请耐心等待。

有些相机的镜头会对图像造成轻微失真,为此 OpenCV 提供了一些方法来帮助 camera calibration process .

实际上,如果你想编写一个自动校正图像失真的应用程序,首先,你需要发现什么是神奇的值需要用于撤消此效果。这些值来自正确的校准程序。

chessboard imageapplication to calibrate the camera 一起使用.因此,在您获得相机设备拍摄的棋盘图像后,将此图像传递给校准应用程序。该应用程序将识别正方形的角并计算失真值并返回您需要用来抵消失真效果的神奇值。此时,您对 calibrateCamera() 返回的 2 个变量感兴趣: 它们是 cameraMatrixdistCoeffs。将它们打印出来,并将数据写在一张纸上。

最后,您正在开发的系统需要有一个函数/方法来消除图像失真,这两个变量将在函数内进行硬编码,然后调用 cv::undistort() (如果您使用的是 OpenCV 的 C++ API):

cv::Mat undistorted;
cv::undistort(image, undistorted, cameraMatrix, distCoeffs);

就是这样。

自动检测旋转可能有点棘手,但首先要做的是找到您感兴趣的物体的坐标。但如果相机处于固定位置,这将很容易。

有关使用 OpenCV 进行透视变化和旋转的更多信息,我建议您查看以下其他问题:

Executing cv::warpPerspective for a fake deskewing on a set of cv::Point

Affine Transform, Simple Rotation and Scaling or something else entirely?

Rotate cv::Mat using cv::warpAffine offsets destination image

关于c++ - 使用棋盘的 OpenCV 变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7902895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com