如何使用opencv在不丢失像素的情况下对图像进行去扭曲
How to dedistort an image without pixel loss using opencv
众所周知
,我们可以使用 alpha = 1 的函数cv::getOptimalNewCameraMatrix()
来获取新的 CameraMatrix。然后我们使用函数cv::undistort()
与新的CameraMatrix一起可以得到去失真的图像。但是,我发现失真后的图像与原始图像一样大,失真后的图像的某些部分被黑色覆盖。所以我的问题是:D这意味着原始图像像素丢失了吗?有没有办法避免像素丢失或使用OpenCV获得大于原始图像的图像?
cv::Mat NewKMatrixLeft = cv::getOptimalNewCameraMatrix(KMatrixLeft,DistMatrixLeft ,cv::Size(image.cols,image.rows),1);
cv::undistort(image, show_image, KMatrixLeft, DistMatrixLeft,NewKMatrixLeft);
图像和show_image的大小都是640 * 480,但是从我的角度来看,失真后的图像大小应该大于640 * 480,因为它的某些部分是没有意义的。谢谢!
为了纠正失真,基本上必须逆转导致初始失真的过程。这意味着像素沿各个方向被拉伸和挤压以校正失真。在某些情况下,这会将像素从图像边缘移开。在OpenCV中,这是通过插入黑色像素来处理的。这种方法没有错。然后,您可以选择如何裁剪它以删除边缘的黑色像素。
相关文章:
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 在未初始化映射的情况下,将值插入到映射的映射中
- 如何使用OpenCV从已知的3D点云(在没有I的情况下构建)估计新图像I的相机姿态矩阵
- 如何使用opencv在不丢失像素的情况下对图像进行去扭曲
- 在没有任何外部库的情况下,是否可以在c++/linux的窗口中显示bmp图像
- 在不使用缓冲区的情况下对2个图像进行操作(加法、减法等)
- 视觉C++库,用于在不使用Opencv的情况下将一组图像转换为视频
- QT是否有其他方法可以在没有QTNetworkManager的情况下加载图像
- 如何在不使用外部库的情况下加载到 8 位C++位图图像
- 在不使用opencv函数的情况下将RGB图像转换为HSI图像
- 是否可以使用 opencv 的 imshow 在没有工具栏的情况下显示图像?
- 如何在没有额外分配的情况下从OpenCV矩阵中获取图像数据
- 在没有关于相机的信息的情况下从2个图像进行三维重建
- 如何在不损失c ++或opencv图像质量的情况下调整图像大小
- 如何在不使用准备好的OpenCv函数的情况下在c++中实现对图像的不锐利遮罩
- 我们可以在不使用 c++ 中的任何库的情况下加载、显示和操作图像的矩阵吗?
- 如何在不完全重新加载每帧每个像素的情况下更改图像的 alpha 值/ 优化
- 如何在不更改分辨率的情况下减小图像数据大小
- 在不使用外部库的情况下在c++中读取灰度.jpeg图像