什么是“ cv2.reg_MapperGradEuclid”对象? (OpenCV)

时间:2019-01-03 12:26:47

标签: python opencv types

我正在尝试使用OpenCV 4和Python 3.6进行一些图像注册。加载两个dicom文件,并将像素数据作为numpy.ndarray处理。当我尝试将这些数组传递给cv2.reg_MapperGradEuclid.calculate()函数时,引发以下错误:

  

描述符'calculate'需要一个cv2.reg_MapperGradEuclid对象   但收到了“ numpy.ndarray”

我查看了文档和几个线程,发现所有应该有两个InputArray属于BGR类型(?),并且在技术上np.ndarray应该起作用。 / p>

    import numpy as np    
    import pydicom    
    import cv2    

    file1="one.DCM"    
    file2="two.DCM"    
    data1 = pydicom.read_file(file1)    
    data2 = pydicom.read_file(file2)    

    PixelArrayBelow = data1.pixel_array         #type np.ndarray
    PixelArrayAbove = data2.pixel_array    

    PixelArrayBelow=PixelArrayBelow.astype(np.float32)    
    PixelArrayAbove=PixelArrayAbove.astype(np.float32)    

    BelowNew=cv2.cvtColor(PixelArrayBelow,cv2.COLOR_GRAY2BGR)    
    AboveNew=cv2.cvtColor(PixelArrayAbove,cv2.COLOR_GRAY2BGR)    

    b = cv2.reg_MapperGradEuclid.calculate(BelowNew,AboveNew)    
    print(b)

我希望它能打印平移和旋转矢量/矩阵的某种组合,但是发生了上述错误。

1 个答案:

答案 0 :(得分:0)

如果先创建一个reg_MapperGradEuclid()对象,然后将图像传递到该对象中,则它似乎可以工作。您没有正确调用该对象。

import cv2

im1 = <some numpy array>
im2 = <some numpy array>

mge_obj = cv2.reg_MapperGradEuclid()
retval = mge_obj.calculate(im1, im2)

因此,使其与代码更改一起使用:

b = cv2.reg_MapperGradEuclid.calculate(BelowNew,AboveNew)

收件人:

b = cv2.reg_MapperGradEuclid().calculate(BelowNew,AboveNew)

类文档是here,但这是非常基础的。