2017-06-06 89 views
1

您好我有我的位圖對象,我需要在Mat對象中進行轉換。我看到有人使用bitmaptoMat函數,但在我的Utils包中,我有很多帶點列表輸入的函數來獲取Mat輸出,但我有我嘗試了另一種解決方案:Imgcodecs.imread需要字符串輸入,我想它需要圖像路徑,但我試圖給uri.toString()但它does not work.What我可以做什麼? 這是我的位圖:位圖到墊子? android opencv

Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); 

回答

1

進口

import org.opencv.android.Utils; 

然後使用功能:

Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); 
Mat imgMAT = new Mat (bitmap.getHeight(), bitmap.getWidth(), CvType.CV_8UC1);  
Utils.bitmapToMat(bitmap, imgMAT); 
+0

我沒有it..but下,我需要創建超像素對象和後 「SuperpixelSLIC X = Ximgproc.createSuperpixelSLIC(克,Ximgproc.SLIC,100,3);」 (g是我的Mat對象),我得到「無法解析相應的jni函數android studio」 – Jt1995

0

您可以使用指針位圖,生成一個墊文件。 我這樣做與QT和它看起來像這樣:

QImage img((uchar*)frame->data(), frame->width(), frame->height(), QImage::Format::Format_RGB888); 

我做到了在OpenCV中,但我不記得確切的構造函數: 嘗試做這樣的事情:

cv::Mat bitmapMat = cv::Mat(bitmap.height, bitmap.width, CV_8UC1, bitmap.data()); 

cv::Mat bitmapMat = cv::Mat(Size _size, int _type, void* _data, size_t _step=AUTO_STEP); 
+0

用Mat g = new Mat(bitmap.getHeight(),bitmap.getWidth(),CvType.CV_8UC1)嘗試過,但我得到錯誤 – Jt1995

+0

你有1個頻道的圖片或3個頻道的圖片嗎?也可能是,在opencv大小以不同的方式存儲,所以你將不得不做寬度,高度。你得到了哪個錯誤?你不需要CvType。 (1個灰度CV_8UC1,rgb CV_8UC3) – hagor