2012-08-13 2 views
3

OpenCV4Android API를 사용하는 Eclipse에서 Android 앱을 작성하고 있습니다. 디버깅 전용으로 Mat 이미지를 어떻게 쉽게 표시 할 수 있습니까?이미지 표시 및 그레이 스케일로 변환 - Android 용 OpenCV, Java API

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

하지만 안드로이드를위한 자바 API는 org.opencv.highgui.Highgui 내부 namedWindow 기능을하지 않는 것 : C++에서 OpenCV의 튜토리얼에 따라, 당신은 뭔가를 할 것입니다.

또한 이미지를 회색조로로드하고 싶습니다.

imread("blackandwhite.jpg", 0); 

을하지만 자바 API의 Highgui.imread()은 파일 이름 만 인수가 있습니다 : C++에서 imread not working in Opencv에 따라, 당신이 할 것입니다.

답변

6

요약 : 그레이 스케일로

변환 이미지 : Imgproc.cvtColor(image, image, Imgproc.COLOR_BGR2GRAY);

디스플레이 이미지 : herehere를 참조하십시오.

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

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은 다음과 같이 이미지 뷰가 있어야

2

하지만 Android 용 Java API에는 org.opencv.highgui.Highgui 내에 namedWindow 함수가없는 것 같습니다.

View에 이미지를 표시해야하기 때문에. WEB의 샘플을보십시오.

또한 이미지를 회색조로로드하고 싶습니다.

CV_BGR2GRAY과 같은 변환 유형의 경우 cvCvtColor을 사용하십시오.

+1

JavaCV는 OpenCV의 타사 래퍼입니다. 오히려 저는 C++/JavaCV와는 다른 구문을 가진 Android 용 OpenCV를 사용하고 있습니다. cvCvtColor에 대한 팁을 가져 주셔서 감사합니다 - 이것은 Imgproc.cvtColor (mat, mat, Imgproc.COLOR_RGB2GRAY)'인 그레이 스케일 변환을위한 솔루션으로 안내해주었습니다. 그래도 '보기'에 이미지를 표시한다는 것은 무슨 뜻인지 모르겠다. 당신은 정교 할 수 있습니까? –

+0

@ user1397061 javacv에는 장치에 이미지를 보여주는 예제가 있습니다. 또한 이미 말했듯이 WEB에는 많은 예가 있습니다. – ArtemStorozhuk

+0

'Highgui.imwrite ("/ image.jpg", mat)'는 속임수를 사용하지만 이미지를 실제로 표시하지 않습니다. 그냥 파일에 저장합니다. JavaCV는 캔버스 프레임을 사용하며 다른 곳에서는 보이지 않습니다. OpenCV4Android를 사용하여 예제에 대한 링크를 게시 하시겠습니까? –

3

는 OpenCV의를 사용하여 이미지 뷰의 (그리기 폴더에 화상을 가져야) 화상을 표시 할 샘플 코드

호프가이 문제를 푸는데 도움이 되길 바랍니다.

0

이미지 표시는 다루지 않지만 여기에는 파일 경로별로 이미지를 읽는 빠른 순수 자바 정적 메서드가 있습니다. 변환 (및 쓰기)을 그레이 스케일로 변환하십시오.

/** 
* 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; 
} 
관련 문제