我正在尝试运行在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
答案 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)