显示图像并转换为灰度 – OpenCV for Android,Java API
我正在Eclipse中编写一个使用OpenCV4Android API的Android应用程序。 如何轻松显示Mat
图像,仅用于调试? 在C ++中,根据OpenCV教程,您可以执行以下操作:
namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display. imshow( "Display window", image ); // Show our image inside it.
但是Android API的Java API似乎没有在org.opencv.highgui.Highgui
使用namedWindow
函数。
另外,我想将图像加载为灰度。 在C ++中,根据imread不在Opencv中工作 ,你会做:
imread("blackandwhite.jpg", 0);
但Java API的Highgui.imread()
只有filename参数。
概要:
将图像转换为灰度: Imgproc.cvtColor(image, image, Imgproc.COLOR_BGR2GRAY);
显示图片:见此处和此处 。
这是一个示例代码,它将使用OpenCV在imageView中显示图像(必须具有可绘制文件夹中的图像):
ImageVIew imgView = (ImageView) findViewById(R.id.sampleImageView); Mat mRgba = new MAt(); mRgba = Utils.loadResource(MainAct.this, R.drawable.your_image,Highgui.CV_LOAD_IMAGE_COLOR); Bitmap img = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(),Bitmap.Config.ARGB_8888); Utils.matToBitmap(mRgba, img); imgView.setImageBitmap(img);
和xml必须具有如下ImageView:
希望这有助于解决您的问题..
但是Android API的Java API似乎没有在org.opencv.highgui.Highgui中使用namedWindow函数。
因为您必须在View
上显示图像。 看一下WEB的样本。
另外,我想将图像加载为灰度。
对于这种类型的转换,请使用代码为CV_BGR2GRAY
。
虽然这不涉及图像的显示,但这里有一个快速的纯java静态方法,用于通过文件路径读取图像,然后将其转换(并将其写入)灰度。
/** * Get an OpenCV matrix from an image path and write the image as grayscale. * @param filePath The image path. * @return The matrix. */ public static Mat loadOpenCvImage(final String filePath) { Mat imgMat = Highgui.imread(filePath, Highgui.CV_LOAD_IMAGE_GRAYSCALE); if (imgMat == null) { Log.e(TAG, "error loading file: " + filePath); } else { Log.d(TAG, "Ht: " + imgMat.height() + " Width: " + imgMat.width()); final String outPath = filePath + "_gray.jpg"; Log.d(TAG, outPath); Highgui.imwrite(outPath, imgMat); } return imgMat; }