什么是OpenCV的UndistortRectifyMap()中的m1type参数

时间:2017-03-16 23:37:49

标签: python opencv

我正在尝试使用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()函数,但它不能用于我的目的。)

2 个答案:

答案 0 :(得分:1)

断言声明m1type必须是:CV_16SC2CV_32FC1CV_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个通道。