Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将ARGB Android图像格式更改为RGB图像格式以在opencv中使用?_Android_Opencv_Image Processing_Android Ndk_Image Formats - Fatal编程技术网

如何将ARGB Android图像格式更改为RGB图像格式以在opencv中使用?

如何将ARGB Android图像格式更改为RGB图像格式以在opencv中使用?,android,opencv,image-processing,android-ndk,image-formats,Android,Opencv,Image Processing,Android Ndk,Image Formats,我有一个ARGB格式的android位图 Bitmap bitmapRGB=Bitmap.createBitmap(capturedImageMat.cols(),capturedImageMat.rows(),Bitmap.Config.ARGB_8888); < P>我将这个图像发送到Android NDK部分,用C++中的OpenCV LabBayy处理图像。现在我想将ARGB格式更改为RGB格式,然后将其更改为BGR,因为Opencv使用BGR格式。首先,我想在opencv中使用cv

我有一个ARGB格式的android位图

 Bitmap bitmapRGB=Bitmap.createBitmap(capturedImageMat.cols(),capturedImageMat.rows(),Bitmap.Config.ARGB_8888);
< P>我将这个图像发送到Android NDK部分,用C++中的OpenCV LabBayy处理图像。现在我想将ARGB格式更改为RGB格式,然后将其更改为BGR,因为Opencv使用BGR格式。首先,我想在opencv中使用cvtColor方法进行更改,但没有ARGB2RGB转换。我还试图了解opencv团队如何在中更改BGRA2BGR,并在此基础上编写代码更改ARGB2RGB,但在opencv源代码中找不到该函数。

多亏了我使用opencv中的方法交换了图像通道。当我们使用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()
默认情况下将
argb888
位图转换为
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;

使用
Utils.bitmapToMat()
将位图转换为OpenCV
Mat
类型。它将把它们存储在RGB的Android订单中。如果需要,可以使用
cvtColor()
@AlexanderReynolds no-Utils将其转换为BGR。bitmapToMat()方法不会将ARGB更改为RGB。我检查了Utils之后的通道数。bitmapToMat()使用int-capturedImageMatChannel=capturedImageat.channels()等方法;它返回4。如果你只是交换频道呢?请看函数底部的例子。好的,我会看到像@AlexanderReynoldswhy有反对票?至少告诉我我的问题出了什么问题