2017-03-16 125 views
0

我想使用的OpenCV的initUndistortRectifyMap()函数来创建一个映射undistorts鱼眼图像,如this tutorial什么是OpenCV中的UndistortRectifyMap()m1type参数

教程中介绍了此行的代码:

mapx,mapy = cv2.initUndistortRectifyMap(mtx,dist,None,newcameramtx,(w,h),5) 

但是,当我的脚本到达这条线,下面的错误被抛出:

OpenCV的errror:断言失败(m1type == CV_16SC2 || m1type == CV_32FC1 || m1type == CV32FC2)在initUndistortedRectifyMap,文件 /hdd/buildbot/slave_jetson_tx_3/35-04T-L4T-R24/opencv/modules/imgproc/src/undistort.cpp

的错误的来源看来是最后一个参数中的'5',根据documentation,这是'm1type - 第一个输出映射的类型,可以是CV_32FC1或CV_16SC2。“这些不同类型的含义是什么,我怎么知道我的程序的正确价值?

(注:我知道cv2.undistort()函数,但它不为我的目的使用。)

回答

1

断言指出m1type必须是一个:CV_16SC2CV_32FC1CV_32FC2,你通过它作为5。这些常数作为OpenCV的2的积分值被映射为

CV_16SC2 - 11

CV_32FC1 - 5

CV_32FC2 - 13

这就是为什么在文档中你提交人已使用5来表示CV_32FC1,但这是一个不好的选择,您必须使用CV_32FC1mat.type()来获取垫的类型,并避免使用任何这样的数字常量。

0

我混乱的一部分是关于'm1型'。这是指存储在OpenCV的Mat对象中的值的类型。名称的格式如下:
CV_[The number of bits per item][Signed or Unsigned][Type Prefix]C[The channel number]source

因此,例如, 'CV_16SC2' 是16位,签字,和2个信道。

相关问题