将1通道垫转换为3通道垫

时间:2017-06-18 03:20:11

标签: android opencv

以下是代码段:

private void loadImage(String path)
{
    originalImage = Highgui.imread(path);

    Log.i(TAG, "Number Of Channels: " + originalImage.channels());

    Mat rgbImage = new Mat();
    sampledImage = new Mat();

    Mat out = new Mat(); // Added
    List<Mat> in = new ArrayList<>();// Added
    in.add(originalImage);// Added
    in.add(originalImage);// Added
    in.add(originalImage);// Added
    Core.merge(in, out);// Added

    Log.i(TAG, "Number Of OUT Channels: " + out.channels());

    Imgproc.cvtColor(originalImage, rgbImage, Imgproc.COLOR_BGR2RGB); // error here

originalImage是1通道,我需要将其转换为3通道。从上面的代码生成的输出仍然是1通道。如何将输出Mat转换为3通道?

2 个答案:

答案 0 :(得分:0)

为什么不尝试使用 String macAddress = android.provider.Settings.Secure.getString(context.getContentResolver(), "bluetooth_address"); ,而不是将单个频道图片合并三次Mat。但是我怀疑cvtColor(in, out, Imgproc.COLOR_GRAY2BGR)会生成一个单一的通道图像,要读取你想要传递originalImage = Highgui.imread(path);标志所需的单个通道我猜,但是因为你正在记录0通道的数量,所以也许我会遗漏一些东西。您的代码可以重写为(假设Log.i(TAG, "Number Of Channels: " + originalImage.channels());是单通道图像):

originalImage

答案 1 :(得分:0)

您可以使用Imgproc.cvtColor()方法将通道1垫转换为通道3。 根据文档,cvtColor()有第四个参数 - &gt; dstCn

  

dstCn - 目标图像中的通道数;如果参数为0,则从src和代码

自动导出通道数

因此,在您的情况下,您可以转换3通道垫中的原始垫,如下所示:

Imgproc.cvtColor(originalImage, rgbImage, Imgproc.COLOR_BGR2RGB,3); // where 3 is channel number

有关详细信息,请在此处检查cvtColor方法:cvtColor 希望它能起作用!!