因此,我正在使用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
!
谢谢!
答案 0 :(得分:8)
因此,事实证明问题在于内核和图像的创建。我相信openCV期望'uint8'
作为内核和映像的数据类型。在这种特殊情况下,我使用dtype='int'
创建了内核,默认为'int64'
。此外,我创建的图片为'int8'
,而不是'uint8'
。不知何故,这并未引发异常,但导致扩张以令人惊讶的方式失败。
将以上两行更改为
binary_image = np.zeros(image.shape,dtype='uint8')
kernel = np.ones((11,11),'uint8')
解决了问题,现在我得到了EUREKA
!万岁!