任何正文请帮助我了解如何在JavaCV中使用convertTo方法。我正在尝试和搜索很多时间而没有找到正确的答案。 所以我的问题是,当我尝试将mat的类型从灰色图像转换为CV_32F并尝试在Android屏幕中显示它时,它将不会给我任何结果。这是我的来源:
Imgproc.cvtColor(src, dst, Imgproc.COLOR_RGBA2GRAY, 1); // dst is gray image
dst.convertTo(dst_f, CvType.CV_32F, 1./255, 0); //convert dst to CV_32F with optional scale
Imgproc.cvtColor(dst_f, src, Imgproc.COLOR_GRAY2RGBA, 4); // to display it in android before convert to bitmap
我也尝试使用此代码在opencv C ++中运行顺利:
imshow("dst", image);
cvtColor(image, dst, CV_BGR2GRAY);
dst.convertTo(dst_f, CV_32F, 1.0/255, 0);
imshow("dst_f", dst_f);
更新:
当我尝试在Android屏幕上在线显示图像时,我认为我错了。我不知道如何显示它尽管我知道android需要4个频道才能在屏幕上显示图像。但是当我将灰色转换为CV_32F图像类型时,我尝试使用与上面相同的代码进行显示,并且在没有无结果的情况下顺利运行。
答案 0 :(得分:3)
经过一些研究和实验,我得到了我的回答,这里是:
Android只能在屏幕上显示4个通道图像,因此您需要将其转换为4个通道(RGBA),但在转换为RGBA / BGRA之前,您必须将Mat图像更改为CV_8U并进行相同缩放。看看这个例子:
Imgproc.cvtColor(src, dst, Imgproc.COLOR_RGBA2GRAY, 1);
dst.convertTo(dst_f, CvType.CV_32F, 1./255, 0);
dst_f.convertTo(final, CvType.CV_8U, 255, 0);
Imgproc.cvtColor(final, src, Imgproc.COLOR_GRAY2RGBA, 4);
使用上面的代码,您的代码将在Android屏幕中完美运行,但如果您尝试将其保存为jpg图像或其他图片扩展名,则会为您提供损坏的图片。如果你想将它保存到SD卡,你可以使用这个来源:
Imgproc.cvtColor(src, dst, Imgproc.COLOR_RGB2GRAY, 1);
dst.convertTo(dst_f, CvType.CV_32F, 1.0/255, 0); // Convert Mat image to CV_32F and scale it to 1.0/255
dst_f.convertTo(final, CvType.CV_32F, 255, 0); //Convert it Back to Default type before
Imgproc.cvtColor(final, roi, Imgproc.COLOR_GRAY2RGB, 0);
Imgproc.cvtColor(roi, roi, Imgproc.COLOR_RGB2RGBA, 0);
首先是我自己的实验,如果你想问我什么,我会尽可能好地回答。谢谢。希望这能帮助别人很多