2012-08-13 122 views
3

我在使用OpenCV4Android API的Eclipse中编写Android应用程序。如何轻松显示Mat图像,仅用于调试?在C++中,根据OpenCV的教程,你会做这样的事情:显示图像并转换为灰度 - Android的OpenCV,Java API

namedWindow("Display window", CV_WINDOW_AUTOSIZE);// Create a window for display. 
imshow("Display window", image); // Show our image inside it. 

但针对Android Java API的似乎不具有内org.opencv.highgui.Highgui一个namedWindow功能。

此外,我想加载图像为灰度。在C++中,根据imread not working in Opencv,你会怎么做:

imread("blackandwhite.jpg", 0); 

但Java API的Highgui.imread()只有文件名参数。

回答

6

总结:

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

显示图片:看到herehere

2

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

因为你必须在View上显示你的图像。看看来自WEB的样本。

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

使用cvCvtColor代码CV_BGR2GRAY这种类型的转换。

+1

我没有使用JavaCV,它是OpenCV的第三方包装器。相反,我使用OpenCV for Android,它的语法不同于C++/JavaCV。感谢关于cvCvtColor的提示 - 这使我转向了灰度转换的解决方案,它是'Imgproc.cvtColor(mat,mat,Imgproc.COLOR_RGB2GRAY)'。不过,我不知道你在'View'上展示图片的意思。你能详细说明一下吗? – 2012-08-13 20:24:32

+0

@ user1397061 javacv提供了在设备上显示图像的示例。正如我已经说过的,在WEB中有很多例子。 – ArtemStorozhuk 2012-08-13 20:26:17

+0

'Highgui.imwrite(“/ image.jpg”,mat)'不会实际显示图像 - 它只是将其保存到文件中。 JavaCV使用画布框架,这似乎并不存在于其他任何地方。你介意发布一个链接到OpenCV4Android的例子吗? – 2012-08-13 20:34:49

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"/> 

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

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; 
}