6

所以,我正在使用 python 和 opencv2 生成一个二进制(嗯,真的是灰度,8 位,用作二进制)图像,将少量多边形写入图像,然后使用内核扩展图像。但是,无论我使用什么内核,我的源映像和目标映像总是以相同的方式结束。有什么想法吗?

from matplotlib import pyplot
import numpy as np
import cv2

binary_image = np.zeros(image.shape,dtype='int8')
for rect in list_of_rectangles: 
    cv2.fillConvexPoly(binary_image, np.array(rect), 255)
kernel = np.ones((11,11),'int')
dilated = cv2.dilate(binary_image,kernel)
if np.array_equal(dilated, binary_image):
    print("EPIC FAIL!!")
else:
    print("eureka!!")

我得到的只是EPIC FAIL

谢谢!

4

1 回答 1

8

因此,事实证明问题出在内核和映像的创建中。我相信 openCV 期望'uint8'作为内核和图像的数据类型。在这种特殊情况下,我创建了内核dtype='int',默认为'int64'. 此外,我将图像创建为'int8',而不是'uint8'。不知何故,这并没有触发异常,而是导致扩张以一种令人惊讶的方式失败。

将以上两行更改为

binary_image = np.zeros(image.shape,dtype='uint8')

kernel = np.ones((11,11),'uint8')

解决了这个问题,现在我明白了EUREKA!万岁!

于 2012-07-02T19:02:53.510 回答