簡體   English   中英

將Mat轉換為Android的Bitmap Opencv

[英]convert Mat to Bitmap Opencv for Android

我正在嘗試使用以下代碼將MAt轉換為位圖:

    Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Mat tmp = new Mat (width,height,CvType.CV_8UC1,new Scalar(4));
    try {
    //Imgproc.cvtColor(seedsImage, tmp, Imgproc.COLOR_RGB2BGRA);
    Imgproc.cvtColor(seedsImage, tmp, Imgproc.COLOR_GRAY2RGBA, 4);
    Utils.matToBitmap(tmp, bmp);}
    catch (CvException e){Log.d("Exception",e.getMessage());}

我的seedsImage是一個Mat對象。 而Exception和got是10-09 22:15:09.418: D/Exception(2461): ..\\..\\modules\\java\\generator\\src\\cpp\\utils.cpp:105: error: (-215) src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols in function void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, _jclass*, jlong, _jobject*, jboolean)我試過了搜索但沒有解決方案適合我。 任何人都可以幫忙嗎?

1)OpenCV Mat構造函數需要<rows, cols>對而不是<width, height>作為其參數。 所以你必須改變你的第二行

Mat tmp = new Mat (height, width, CvType.CV_8U, new Scalar(4));

2) Imgproc.cvtColor可以改變tmp對象的尺寸。 因此,在顏色轉換后創建位圖是安全的:

Bitmap bmp = null;
Mat tmp = new Mat (height, width, CvType.CV_8U, new Scalar(4));
try {
    //Imgproc.cvtColor(seedsImage, tmp, Imgproc.COLOR_RGB2BGRA);
    Imgproc.cvtColor(seedsImage, tmp, Imgproc.COLOR_GRAY2RGBA, 4);
    bmp = Bitmap.createBitmap(tmp.cols(), tmp.rows(), Bitmap.Config.ARGB_8888);
    Utils.matToBitmap(tmp, bmp);
}
catch (CvException e){Log.d("Exception",e.getMessage());}

嘗試使用此代碼進行mat到位圖轉換

**Mat mRgba;
public void onCameraViewStarted(int width, int height) {
        mRgba = new Mat(height, width, CvType.CV_8UC4);
}
public Mat onCameraFrame(Mat inputFrame) {
   inputFrame.copyTo(mRgba);
   return mRgba;
}
private void captureBitmap(){
       bitmap = Bitmap.createBitmap(mOpenCvCameraView.getWidth()/4,mOpenCvCameraView.getHeight()/4, Bitmap.Config.ARGB_8888);
    try {
          bitmap = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);
                Utils.matToBitmap(mRgba, bitmap);
               mBitmap.setImageBitmap(bitmap);
               mBitmap.invalidate();
    }catch(Exception ex){
          System.out.println(ex.getMessage());
    }
 }**

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM