3

我正在使用OpenCV4Android API 在 Eclipse 中编写一个 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 的 Java API 内部似乎没有namedWindow函数org.opencv.highgui.Highgui

另外,我想将图像加载为灰度。在 C++ 中,根据imread not working in Opencv,你会这样做:

imread("blackandwhite.jpg", 0);

但 Java APIHighgui.imread()只有文件名参数。

4

4 回答 4

7

概括:

将图像转换为灰度:Imgproc.cvtColor(image, image, Imgproc.COLOR_BGR2GRAY);

显示图像:请参见此处此处

于 2012-09-11T02:57:19.057 回答
3

这是一个示例代码,它将使用 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 如下:

<ImageView
        android:id="@+id/sampleImageView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"/>

希望这有助于解决您的问题..

于 2012-09-11T04:22:43.737 回答
2

但 Android 的 Java API 似乎在 org.opencv.highgui.Highgui 中没有 namedWindow 函数。

因为你必须在View. 查看来自 WEB 的示例。

另外,我想将图像加载为灰度。

与此类转换cvCvtColor的代码一起使用。CV_BGR2GRAY

于 2012-08-13T19:56:19.623 回答
0

虽然这不处理图像的显示,但这是一个快速的纯 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;
}
于 2014-03-31T13:53:07.853 回答