以下是代码段:
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通道?
答案 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 希望它能起作用!!