OpenCV Python重新映射数据类型错误

Posted

技术标签:

【中文标题】OpenCV Python重新映射数据类型错误【英文标题】:OpenCV Python remap data type error 【发布时间】:2017-09-06 14:59:25 【问题描述】:

我正在尝试使用 cv2 和 numpy 使用 openCv 重新映射图像,但我遇到了一些问题。我收到的错误是:

OpenCV 错误:断言失败 (((map1.type() == CV_32FC2 || map1.type() == CV_16SC2) && map2.empty()) || (map1.type() == CV_32FC1 && map2 .type() == CV_32FC1)) 在重映射中,文件 /tmp/binarydeb/ros-kinetic-opencv3-3.2.0/modules/imgproc/src/imgwarp.cpp,第 5043 行

但两个地图都是 float32 类型 - 所以我不太明白这个错误。我在函数中运行以下代码:

rows, cols, channels = img.shape

map_x = np.zeros( (rows,cols,channels), np.float32 )
map_y = np.zeros( (rows,cols,channels), np.float32 )

for i in xrange( rows ):
    for j in xrange( cols ):#

        p = [ i, j ]

        x = np.array( [ p[0], p[1], 1, p[0]*p[1]] )
        #Compute pixel transform
        trans = np.round( x.dot( self.w ) )

        map_x[i,j] = trans[0]
        map_y[i,j] = trans[1] 


outimg = cv2.remap( img, map1, map2, cv2.INTER_CUBIC )

提前致谢

【问题讨论】:

一个很好的猜测是channels 不是 1,但数组应该是单通道(CV_32FC1 -- 32 位浮点数,1 通道) 啊,你说得对,谢谢 @tjp212 你还记得你纠正了什么让它工作吗? 【参考方案1】:

转换为需要的类型

Mat mat1 = new Mat() // or may be the input mat/map     
Imgproc.cvtColor(mat1, mat1, Imgproc.COLOR_BGR2GRAY); //Call this before conversion otherwise it won't work
mat1.convertTo(mat1,CvType.CV_32FC1);

有用的链接:https://docs.opencv.org/3.1.0/da/d54/group__imgproc__transform.html#gab75ef31ce5cdfb5c44b6da5f3b908ea4

【讨论】:

以上是关于OpenCV Python重新映射数据类型错误的主要内容,如果未能解决你的问题,请参考以下文章

Python OpenCV 立体相机校准阵列错误:TypeError:不支持 imagePoints1 数据类型 = 17

利用OpenCV的函数LUT()对矩阵的数据进行查表映射

导入opencv时出现Python3重新链接问题

Python库Numpy中的数据类型与OpenCV中数据类型的对应关系以及改写相关代码时需注意的地方

OpenCV 例程300篇249. 图像的重映射(cv2.remap)

OpenCV 例程300篇249. 图像的重映射(cv2.remap)