c – InitUndistortRectifyMap和Remap
我目前正在为一对立体相机编写openCV程序.
完成了摄像机校准和立体声校准. 下一步是从我得到的2张图像中找到一个特征在空间中的位置.这就是为什么我必须立体声整理图像然后进行计算. 我在initUndistortRectifyMap面临的问题如下: – 如果我将由stereoRectify()计算的R1或R2传递给initUndistortRectifyMap(),我会在重映射后得到黑色图像. – 如果我将r(空矩阵)传递给initUndistortRectifyMap(),我会在重新映射后得到未经校正的图像.我得到的图像虽然有点扭曲. 我需要将R1和R2传递给initUndistortRectifyMap()来纠正2个摄像头,否则当传递空矩阵时,立体声头不会旋转到同一个平面. 以下是我的代码: stereoRectify(intrinsic[0],distCoeffs[0],intrinsic[1],distCoeffs[1],imageSize,R,T_Stereo,R1,R2,newP1,newP2,Q,CV_CALIB_ZERO_DISPARITY,-1,imageSize); if (x_Cam.GetSerial()=="4002678487") { initUndistortRectifyMap(intrinsic[0],CV_16SC2,mapx1,mapy1); remap(x_Image,imageRectified[0],mapy1,INTER_LINEAR); return imageRectified[0]; } if (x_Cam.GetSerial()=="4002702131") { //flip(in,in,-1); initUndistortRectifyMap(intrinsic[1],mapx2,mapy2); remap(x_Image,imageRectified[1],mapy2,INTER_LINEAR,BORDER_CONSTANT,0); return imageRectified[1]; } 我检查了进入stereoRectify()的所有矩阵值,它们是正确的.旋转矩阵R1和R2似乎也是正确的.我只是将黑色图像作为输出. 我尝试将垃圾值传递到InitUndistortRectifyMap()中以获取R1和R2(例如R1 * R2)以简单地看到效果,并且我确实获得了奇怪的结果但不是黑色图像. 解决方法
好吧,我解决了这个问题,并认为我会分享解决方案,任何人都可以使用它.
使用Rotation Matrices R1时,InitUndistortRectifyMap输出空白图像,StereoRectify生成R2. 因此,我尝试使用StereoRectifyUncalibrated,它生成2个Homography矩阵H1和H2,并且我根据OpenCV文档计算了旋转: R1 = inv(CamMatrix1)* H1 * CamMatrix1 我将新的R1和R2传递给InitUndistortRectifyMap并重新映射,结果令人满意. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails – Rails控制器中实例变量的范围是什么?
- 许可 – LGPL是否确保依赖我的代码的程序承认它?
- 如何使用SAX XML Schema Validator的验证消息进行内部化?
- 如何正确安装Alamofire SwiftyJSon和Alamofire-SwiftyJson
- 最全的常用正则表达式大全分享
- 用于生成Haskell函数依赖(控制流)图的工具?
- 除了cPickle,cjson外还有没有更高效点的序列化库了
- FlexBuilder安装和HelloWorld例子
- rvm设置ruby版本和返回到系统默认版本
- qt – 如何生成dbus示例中名为“D-Bus遥控车示例”的“car.