2011-12-26 27 views
5

Tôi hiện đang cố di chuyển một chút mã cũ từ iPhone sang Android. Mã này sử dụng thư viện OpenCV để thực hiện một số xử lý hình ảnh. Và tôi không thể hiểu cách chuyển đổi giữa các lớp Mat và Android Bitmap.Cách chính xác để chuyển đổi giữa Bitmap và Mat trong OpenCV trên Android?

Mã này cho thấy một ví dụ rất đơn giản tải một bitmap vào một Mat, sau đó chuyển đổi nó trở lại bitmap. Hình ảnh kết quả trông kỳ lạ - nó chứa đầy các pixel màu xanh và trắng. Và ảnh gốc là hình ảnh PNG bình thường ...

Mat img = Utils.loadResource(context, resId); 
    Bitmap tmp = Bitmap.createBitmap(img.rows(), img.cols(), 
    Bitmap.Config.ARGB_8888);    
    Utils.matToBitmap(img, tmp); 

Trả lời

13

Hiện tại matToBitmap hơi lỗi, tôi đã đọc họ định sửa lỗi trong bản phát hành sau này.

tôi có thể hiển thị nó như thế nào tôi đã làm việc xung quanh nó cho một hình ảnh màu sắc:

mMat = Utils.loadResource(this, resId, Highgui.CV_LOAD_IMAGE_COLOR); 
Imgproc.cvtColor(mMat, result, Imgproc.COLOR_RGB2BGRA); 
bmp = Bitmap.createBitmap(result.cols(), result.rows(), Bitmap.Config.ARGB_8888); 
Utils.matToBitmap(result, bmp); 
mImageView.setImageBitmap(bmp); 

Về cơ bản tôi thực hiện mà chuyển đổi màu sắc không gian đầu tiên hay như bạn nói kết quả sẽ là một sự pha trộn kỳ lạ của màu sắc ngẫu nhiên.

Trả lời nếu nó hoạt động, tôi nghĩ vậy.

+0

Làm thế nào để bạn nhận được 'resId'? Tôi đang cố gắng chuyển đổi một hình ảnh lấy được từ máy ảnh từ bmp sang Mat, xử lý, sau đó quay lại. Và do đó tất cả các thông tin có sẵn về bmp là tên đường dẫn, và bản thân bmp. –

+0

@ user1446598 Bạn đang sử dụng openCV trong Android? – greven

+0

Có. Vấn đề đã được giải quyết - Tôi đã tìm thấy một bài SO, mà tôi không thể tìm thấy vào lúc này, đã giúp với thủ tục. Tuy nhiên, tôi vẫn không biết cách lấy một resID từ một bức ảnh được chụp bằng camera (không giống với các mục có thể kéo được), nhưng cách tiếp cận gợi ý đã sử dụng tên đường dẫn thay thế. –

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