2011-12-26 56 views
5

我目前正在尝试将一些遗留代码从iPhone迁移到Android。此代码使用OpenCV库进行一些图像处理。 而我不明白如何做Mat和Android位图类之间的转换。在Android上OpenCV中的位图和Mat之间转换的正确方法?

此代码显示了一个非常简单的示例,它将一个位图加载到Mat中,然后将其转换回Bitmap。由此产生的图像看起来很奇怪 - 它充满了蓝色和白色像素。原来是一个正常的PNG图像...

Mat img = Utils.loadResource(context, resId); 
    Bitmap tmp = Bitmap.createBitmap(img.rows(), img.cols(), 
    Bitmap.Config.ARGB_8888);    
    Utils.matToBitmap(img, tmp); 

回答

13

目前matToBitmap是有点bug,我读过他们打算在未来的版本中修复它。

我可以告诉它怎么工作围绕它的彩色图像:

mMat = Utils.loadResource(this, resId, Highgui.CV_LOAD_IMAGE_COLOR); 
Imgproc.cvtColor(mMat, result, Imgproc.COLOR_RGB2BGRA); 
bmp = Bitmap.createBitmap(result.cols(), result.rows(), Bitmap.Config.ARGB_8888); 
Utils.matToBitmap(result, bmp); 
mImageView.setImageBitmap(bmp); 

基本上我第一或类似的执行空间的颜色转换你说的结果将是随机颜色怪异的混合。

回答如果有效,我认为是的。

+0

如何获得'resId'?我试图从bmp转换一个摄像机意图获取的图像到Mat,处理,然后再回来。因此所有关于bmp的信息都是路径名和bmp本身。 – 2013-01-29 06:10:36

+0

@ user1446598您是否在Android中使用openCV? – greven 2013-02-02 02:57:31

+0

是的。问题解决了 - 我发现了一篇SO帖子,目前我找不到,这有助于程序。我仍然不知道如何从捕获照片的照片中获取resID(与可绘制项目不同),但是建议使用路径名替代。 – 2013-02-09 15:09:57