函数cv :: reduce中不支持的输入和输出数组格式组合

时间:2019-06-10 10:23:00

标签: python opencv image-segmentation

我正在尝试运行在GitHub上找到的行分段代码。当程序到达以下代码行:

def invert(im):
    im = abs(255 - im)
    im = im / 255

    return im


def enhance(im):
    kernel = np.ones((5, 5), np.uint8)
    im = cv2.erode(im, kernel, iterations=1)
    kernel = np.ones((15, 15), np.uint8)
    im = cv2.dilate(im, kernel, iterations=1)
    return im


im = cv2.imread(filename, 0)
imbw = sauvola.binarize(im, [20, 20], 128, 0.3)
im = invert(im)
im = enhance(im)
hist = cv2.reduce(im, 1, cv2.REDUCE_SUM, dtype=cv2.CV_32F)

我收到此错误:

  

错误:OpenCV(3.4.1)C:\ projects \ opencv-python \ opencv \ modules \ core \ src \ matrix_operations.cpp:1111:错误:(-210)功能中输入和输出数组格式的不支持组合cv :: reduce

我尝试了所有可用于cv2.reduce()函数的dtype值。我也尝试过使用numpy更改图像的数据类型。但是,我仍然遇到相同的错误。

完整代码:https://github.com/smeucci/LineSegm/blob/master/python/linesegm/lib/linelocalization.py#L41

1 个答案:

答案 0 :(得分:0)

imread()返回uchar数据,但是您像处理浮点数一样处理它。

im = im / 255

例如,如果您将其应用于 uchar OpenCV矩阵,那么这行代码将使所有像素等于零。

在读取图像后,将im像素格式转换为浮点型。这段代码对我有用:

im = cv2.imread("im.jpg", 0)
im = np.float32(im)
im = invert(im)
im = enhance(im)
hist = cv2.reduce(im, 1, cv2.REDUCE_SUM, dtype=cv2.CV_32F)