Tôi đang sử dụng tìm kiếm chọn lọc tại đây: http://koen.me/research/selectivesearch/ Điều này cho phép các vùng có thể quan tâm đối tượng có thể ở đâu. Tôi muốn thực hiện một số xử lý và chỉ giữ lại một số vùng, sau đó loại bỏ các hộp giới hạn trùng lặp để có một tập hợp các hộp giới hạn gọn gàng cuối cùng. Để loại bỏ các vùng hộp giới hạn không mong muốn/trùng lặp, tôi đang sử dụng hàm grouprectangles
của opencv để cắt tỉa.python opencv TypeError: Bố cục của mảng đầu ra không tương thích với cv :: Mat
Khi tôi nhận được các khu vực thú vị từ Matlab từ "thuật toán tìm kiếm chọn lọc" trong liên kết trên, tôi tiết kiệm được các kết quả trong một tập tin .mat
và sau đó lấy chúng trong một chương trình python, như thế này:
import scipy.io as sio
inboxes = sio.loadmat('C:\\PATH_TO_MATFILE.mat')
candidates = np.array(inboxes['boxes'])
# candidates is 4 x N array with each row describing a bounding box like this:
# [rowBegin colBegin rowEnd colEnd]
# Now I will process the candidates and retain only those regions that are interesting
found = [] # This is the list in which I will retain what's interesting
for win in candidates:
# doing some processing here, and if some condition is met, then retain it:
found.append(win)
# Now I want to store only the interesting regions, stored in 'found',
# and prune unnecessary bounding boxes
boxes = cv2.groupRectangles(found, 1, 2) # But I get an error here
Lỗi này là:
boxes = cv2.groupRectangles(found, 1, 2)
TypeError: Layout of the output array rectList is incompatible with cv::Mat (step[ndims-1] != elemsize or step[1] != elemsize*nchannels)
Có vấn đề gì? Tôi đã làm điều gì đó rất giống với một đoạn mã khác không có lỗi. Đây là mã lỗi miễn phí:
inboxes = sio.loadmat('C:\\PATH_TO_MY_FILE\\boxes.mat')
boxes = np.array(inboxes['boxes'])
pruned_boxes = cv2.groupRectangles(boxes.tolist(), 100, 300)
Sự khác biệt duy nhất tôi có thể thấy là boxes
là một mảng NumPy mà tôi sau đó chuyển đổi vào một danh sách. Nhưng trong mã có vấn đề của tôi, found
đã là một danh sách.
chỉ đơn giản là sao chép mảng làm việc cho tôi vì một lỗi tương tự là tốt. –
Có thể xác nhận điều này là tốt, có vẻ như không có sự khác biệt có thể nhìn thấy, tho. – Pwnna
Giải pháp này làm việc cho một lỗi tương tự được tạo ra bởi hàm cv2.ellipse() – DanGoodrick