我正在尝试使用OpenCV的initUndistortRectifyMap()
函数创建一个不会破坏鱼眼图像的地图,如this tutorial中所述
本教程有以下代码:
mapx,mapy = cv2.initUndistortRectifyMap(mtx,dist,None,newcameramtx,(w,h),5)
但是当我的脚本到达该行时,会抛出以下错误:
OpenCV错误:断言失败(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()函数,但它不能用于我的目的。)
答案 0 :(得分:1)
断言声明m1type
必须是:CV_16SC2
,CV_32FC1
或CV_32FC2
之一,并且您将其作为5
传递。从OpenCV 2开始,这些常量的整数值被映射为
CV_16SC2 - 11
CV_32FC1 - 5
CV_32FC2 - 13
这就是为什么在您引用的文档中,作者使用5
来表示CV_32FC1
,但这是一个糟糕的选择,您必须使用CV_32FC1
或{{1获取mat的类型,并避免使用任何这样的数值常量。
答案 1 :(得分:0)
我混淆的一部分是'm1type'。这是指存储在OpenCV的Mat对象中的值的类型。名称格式如下:
CV_[The number of bits per item][Signed or Unsigned][Type Prefix]C[The channel number]
(source)
因此,例如,'CV_16SC2'是16位,有符号,2个通道。