当我使用openCv Mat时,为什么我的应用程序崩溃了

时间:2016-09-18 07:33:04

标签: android image opencv

我是openCV android图像处理的新手。但我面临一些问题。当我在Android中使用openCV并且我使用Mat然后我的应用程序将粉碎....这有什么问题.....

我的代码在这里..:

 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    ImageView img=(ImageView) findViewById(R.id.imageView);

    Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.in);

    Mat tmp = new Mat (b.getWidth(), b.getHeight(), CvType.CV_8UC1);
    Utils.bitmapToMat(b, tmp);
    Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_RGB2GRAY);
      //there could be some processing
    Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_GRAY2RGB, 4);
    Utils.matToBitmap(tmp, b);
    img.setImageBitmap(b);

}

1 个答案:

答案 0 :(得分:0)

存在多个问题:

  1. Mat构造函数为Mat(height, width, type),您的高度和宽度都是倒置的。

  2. CV_8UC1是单通道(灰度)。因此,如果需要提前创建Mat,则应创建具有适当数量通道的Mat。我假设您要使用RGB图像,因此请使用CV_8UC3。但通常情况下,如果尺寸不合适,函数会重新分配Mat。如果bitmapToMat的情况也是如此,则还有另一个问题。

  3. Afaik,android使用RGBA作为标准色彩空间。因此Utils.bitmapToMat(b, tmp); tmp之后的PROBABLY是一个4通道RGBA矩阵。因此,如果您不确定是否应添加Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_RGBA2GRAY);之类的检查,请检查Imgproc.cvtColor(tmp, tmp, Imgproc.COLOR_GRAY2RGBA, 4);,如果检查失败,您可以尝试找出真实数量的渠道,请尝试if Mat.channels isn't 3, don't try to convert RGB2GRAY及更晚jQuery#next()是和为什么。