我正在尝试使用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)
我希望它能打印平移和旋转矢量/矩阵的某种组合,但是发生了上述错误。
答案 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,但这是非常基础的。