【问题标题】:Bitmap to Mat? android opencv位图到垫?安卓opencv
【发布时间】:2017-06-06 15:26:25
【问题描述】:

嗨,我有我的 Bitmap 对象,我需要在 Mat 对象中转换。我看到有人使用了 bitmaptoMat 函数,但是在我的 Utils 包中,我有很多带有点列表输入的函数来获取 Mat 输出,但我有我的位图文件。我尝试了另一种解决方案:需要字符串输入的 Imgcodecs.imread,我猜它需要图像路径,但我尝试提供 uri.toString() 但它不起作用。我该怎么办? 这是我的位图:

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

【问题讨论】:

    标签: android opencv bitmap


    【解决方案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);
    

    【讨论】:

    • 我做到了..但是接下来,我需要在“ SuperpixelSLIC x=Ximgproc.createSuperpixelSLIC(g,Ximgproc.SLIC,100,3); 之后创建超像素对象应用程序崩溃,(g 是我的 Mat 对象),我得到“无法解析相应的 jni 函数 android studio”
    【解决方案2】:

    您可以使用指向位图的指针来生成 Mat 文件。 我用 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);
    

    【讨论】:

    • 尝试使用 Mat g=new Mat(bitmap.getHeight(),bitmap.getWidth(),CvType.CV_8UC1),但出现错误
    • 你有1通道图像还是3通道图像?也可能是,在opencv中,大小以不同的方式存储,所以你必须做宽度,高度。你得到哪个错误?你不需要 CvType。 (只有 CV_8UC1 用于 1 灰度和 CV_8UC3 用于 rgb )
    猜你喜欢
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多