kev*_*key 7 c c++ opencv transformation image-processing
我刚刚开始尝试使用OpenCV.我有一个静态位置的LCD设置,我想从图像中提取屏幕上显示的内容.我已经看到用于校准相机的棋盘图案,但似乎这用于不影响图像,这不完全是我想要做的.
我想我会在液晶显示屏上显示棋盘,然后找出将液晶显示屏的图像转换成直接在头顶和裁剪的棋盘理想视图所需的转换.然后我会存储转换,更改LCD显示的内容,拍照,执行相同的转换,并获得现在正在显示的内容的理想视图.
我想知道这听起来是个好主意吗?有没有更简单的方法来实现我想要做的事情?关于函数的任何提示我应该用来计算转换,执行它们,存储它们(可能只是将转换矩阵保存在内存中或将它们写入文件中)等等?
kar*_*lip 17
我不确定我是否理解你要做的一切,但要忍受我.
有些相机的镜头会对图像造成一点失真,为此,OpenCV提供了一些方法来辅助相机校准过程.
实际上,如果你想编写一个能够自动纠正图像失真的应用程序,首先,你需要发现需要用来消除这种效果的神奇值.这些值来自适当的校准程序.
的棋盘的图像与一个一起使用的应用程序来校准照相机.因此,在您拥有相机设备拍摄的棋盘图像后,将此图像传递给校准应用程序.该应用程序将识别方块的角落并计算失真的值,并返回您需要用来抵抗失真效果的神奇值.此时,您感兴趣的是返回的2个变量calibrateCamera():它们是cameraMatrix和distCoeffs.打印它们,并将数据写在一张纸上.
最后,您正在开发的系统需要有一个函数/方法来解除图像的失真,这两个变量将在函数内部进行硬编码,然后调用cv::undistort()(如果您使用的是OpenCV的C++ API):
cv::Mat undistorted;
cv::undistort(image, undistorted, cameraMatrix, distCoeffs);
Run Code Online (Sandbox Code Playgroud)
就是这样.
自动检测旋转可能有点棘手,但首先要做的是找到您感兴趣的对象的坐标.但是如果摄像机处于固定位置,这将很容易.
有关使用OpenCV进行透视更改和旋转的更多信息,我建议您查看以下其他问题:
在一组cv :: Point上执行cv :: warpPerspective以进行伪偏移
使用cv :: warpAffine偏移目标图像来旋转cv :: Mat
| 归档时间: |
|
| 查看次数: |
16273 次 |
| 最近记录: |