2012-06-30 45 views
6

Vì vậy, tôi tạo ra một hình ảnh nhị phân (tốt, thực sự màu xám, 8bit, được sử dụng dưới dạng nhị phân) với python và opencv2, viết một số lượng nhỏ các đa giác vào ảnh và sau đó làm giãn hình ảnh bằng hạt nhân. Tuy nhiên, hình ảnh nguồn và đích của tôi luôn luôn kết thúc giống nhau, bất kể hạt nhân tôi sử dụng là gì. Có suy nghĩ gì không?Tại sao cv2 giãn nở thực sự ảnh hưởng đến hình ảnh của tôi?

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!!") 

Tất cả những gì tôi nhận được là EPIC FAIL!

Cảm ơn!

Trả lời

8

Vì vậy, nó chỉ ra vấn đề là trong việc tạo ra hạt nhân và hình ảnh. Tôi tin rằng openCV mong đợi 'uint8' như một kiểu dữ liệu cho cả hạt nhân và hình ảnh. Trong trường hợp cụ thể này, tôi đã tạo hạt nhân với dtype='int', mặc định là 'int64'. Ngoài ra, tôi đã tạo hình ảnh là 'int8', không phải là 'uint8'. Bằng cách nào đó điều này đã không kích hoạt một ngoại lệ, nhưng gây ra sự giãn nở thất bại trong một thời trang đáng ngạc nhiên.

Thay đổi hai dòng trên để

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

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

Cố định vấn đề này, và bây giờ tôi có được EUREKA! Hoan hô!

Các vấn đề liên quan