我是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);
}
答案 0 :(得分:0)
存在多个问题:
Mat构造函数为Mat(height, width, type)
,您的高度和宽度都是倒置的。
CV_8UC1
是单通道(灰度)。因此,如果需要提前创建Mat,则应创建具有适当数量通道的Mat。我假设您要使用RGB图像,因此请使用CV_8UC3
。但通常情况下,如果尺寸不合适,函数会重新分配Mat。如果bitmapToMat
的情况也是如此,则还有另一个问题。
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()
是和为什么。