2013-04-22 21 views
6

tôi đã cố gắng để tìm đường viền với thư viện CV2 trăn trong một hình ảnh skeletonized tạo ra với scikit-hình ảnh và tôi đã nhận lỗi này:Làm thế nào tôi có thể chuyển đổi hình ảnh từ scikit-hình ảnh sang opencv2 và các thư viện khác?

contours, hierarchy = cv2.findContours(skel,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) 
TypeError: <unknown> data type = 0 is not supported 

Câu hỏi của tôi là: Những gì tôi phải làm gì để chuyển đổi sang CV2 và ngược lại?

Tôi biết rằng loại sử dụng opencv numpy.uint8 để đại diện cho hình ảnh nhị phân thay vì scikit-image numpy.float64

Tôi cũng sử dụng mahotas (numpy.bool) và thư viện pymorph. Làm cách nào để chuyển đổi từ scikit-image sang các thư viện này và ngược lại?

+0

Tôi nghĩ tôi thấy mình giải pháp! Nếu tôi sử dụng: skel = np.array (skel, dtype = np.uint8) tôi dễ dàng chuyển đổi trong loại opencv2 và như vậy cho các thư viện khác! – improc

+0

http://scikit-image.org/docs/dev/user_guide/data_types.html#using-an-image-from-skimage-with-opencv – tidy

Trả lời

11

scikit-image cung cấp chuyển đổi thói quen giữa các dữ liệu khác nhau mà còn bảo tồn một cách chính xác tỉ lệ:

from skimage import img_as_ubyte 

cv_image = img_as_ubyte(any_skimage_image) 

Cập nhật: hướng dẫn sử dụng scikit hình ảnh bây giờ có một phần chi tiết hơn về vấn đề này: http://scikit-image.org/docs/stable/user_guide/data_types.html#working-with-opencv

+1

Biến thể ngược lại: từ cv_image đến skimage là gì? –

+2

Nếu cv_image là một mảng các byte chưa ký, skimage sẽ hiểu nó theo mặc định. Nếu bạn thích làm việc với hình ảnh điểm nổi, 'img_as_float' nên thực hiện thủ thuật. Xem hướng dẫn sử dụng của skimage để biết thêm thông tin. –

+0

Ngoài ra, bất cứ ai sẽ cần những chuyển đổi này, hãy nhớ rằng OpenCV sử dụng không gian màu BGR theo mặc định trong khi Skimage sử dụng RGB một :-) –

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