如何将ARGB Android图像格式转换为RGB图像格式以便在opencv中使用?

How to change ARGB Android image format into RGB image format to be used in opencv?

我在 android

中有一个 ARGB 格式的位图
 Bitmap bitmapRGB=Bitmap.createBitmap(capturedImageMat.cols(),capturedImageMat.rows(),Bitmap.Config.ARGB_8888);

我将此图像发送到 Android NDK 部分以在 C++ 中使用 Opencv libaray 处理图像。现在我想把ARGB格式改成RGB格式,然后再改成BGR,因为Opencv使用的是BGR格式。起初我想在 opencv 中使用 cvtColor 方法进行更改,但是没有 ARGB2RGB 转换。我还尝试查看 opencv 团队如何在 github 中更改 BGRA2BGR 并基于此编写代码来更改 ARGB2RGB 但我无法在 opencv 源代码中找到该函数。

感谢opencv中的Alexander i swapped the image channels using mixChannels方法。当我们使用 bitmapToMat 方法时,android 的 ARGB 图像格式在 opencv mat 中被更改为 RGBA 图像格式。我用来将 RGBA 图像格式分成两个不同图像的代码,即 RGB 和 A

cv::Mat inputImage = *(cv::Mat *) inputImageAddress_;
cv::Mat inputImageBGR(inputImage.rows, inputImage.cols,CV_8UC3);
cv::Mat inputImageALPHA(inputImage.rows, inputImage.cols,CV_8UC1);
 int from_to[]={0,2, 1,1, 2,0, 3,3};
Mat out[]={inputImageBGR,inputImageALPHA};
cv::mixChannels(&inputImage,1,out,2,from_to,4);

正如@Yirga 指出的那样,OpenCV 的 Utils.bitmapToMat() 默认将 ARGB8888 位图转换为 RGBA Mat。

因此,将 ARGB8888 Android 位图转换为 RGB OpenCV Mat 的完整 Java 解决方案为:

Bitmap imageFromAndroid = ... ; // Whatever you have
Mat cvMatRGB = new Mat();
Utils.bitmapToMat(imageFromAndroid, cvMatRGB);
Imgproc.cvtColor(cvMatRGB, cvMatRGB, Imgproc.COLOR_RGBA2RGB);

进口:

import android.graphics.Bitmap;
import org.opencv.core.Mat;
import org.opencv.android.Utils;
import org.opencv.imgproc.Imgproc;