2011-12-26 14 views
5

Obecnie próbuję przenieść nieco starszego kodu z iPhone'a na Androida. Ten kod wykorzystuje bibliotekę OpenCV do przetwarzania obrazu. Nie mogę zrozumieć, jak przeprowadzić konwersję między klasami Mat i Android Bitmap.Prawidłowy sposób konwertowania bitmapy i maty w OpenCV na Androida?

Ten kod przedstawia bardzo uproszczony przykład, który ładuje mapę bitową do macie, a następnie zamienia ją z powrotem na mapę bitową. Wynikowy obraz wygląda dziwnie - jest wypełniony niebieskimi i białymi pikselami. A oryginał jest normalne PNG ...

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

Odpowiedz

13

Obecnie matToBitmap jest nieco buggy, czytałem zamierzają naprawić w przyszłej wersji.

mogę pokazać jak pracowałem wokół niego dla obrazu kolorowego:

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); 

Zasadniczo wykonać tę konwersję przestrzeni barw pierwszy lub jakbyś powiedział, że wynik będzie dziwna mieszanka kolorów losowych.

Odpowiedz, jeśli to działa, myślę, że tak.

+0

Jak uzyskać "resId"? Próbuję przekonwertować obraz pochodzący z kamery z bmp na Mat, proces, a następnie z powrotem. A zatem wszystkie dostępne informacje dotyczące bmp to nazwa ścieżki i sama bmp. –

+0

@ user1446598 Czy używasz openCV w systemie Android? – greven

+0

Tak. Problem został rozwiązany - Znalazłem wpis SO, którego nie mogę znaleźć w tej chwili, który pomógł w procedurze. Nadal nie wiem, jak uzyskać resID ze zdjęcia zrobionego kamerą (w przeciwieństwie do elementów do rysowania), ale sugerowane podejście wykorzystywało zamiast tego nazwę ścieżki. –

Powiązane problemy