2014-07-04 2 views
1

어디서나 해결책을 찾고 있지만 찾지 못했습니다. 나는 이것이 반복적 인 질문이라는 것을 알고 있으며, 그래서 나는 정확하게하려고 노력할 것이다.ImageView에 Android OpenCV 색상 분할 표시

Android 및 OpenCV를 사용하여 HSV에서 색상 분할을 수행하고 싶습니다. I는 H, S 및 이러한 범위를 얻으면

lowerBoundH = new Scalar(meanSamples[0]-stdSamples[0]); 
lowerBoundS = new Scalar(meanSamples[1]-stdSamples[1]); 
upperBoundH = new Scalar(meanSamples[0]+stdSamples[0]); 
upperBoundS = new Scalar(meanSamples[1]+stdSamples[1]); 

: I는 I 같은 값의 범위를 얻기 위해 meanstd를 획득되는 I 세그먼트에 원하는 색에 대응 HSV 샘플의 배열을 가지고

mH = new Mat(); 
mS = new Mat(); 
List<Mat> channels = new ArrayList<Mat>(2); 

// convert inputFrame to HSV for segmentation 
Mat hsvFrame = new Mat(); 
convertToHSV(inputFrame, hsvFrame); 
Core.split(hsvFrame, channels); 
// get H&S channels of the HSVimage 
mH = channels.get(0); 
mS = channels.get(1); 

if(mH!=null & mS!=null){ 
    mHinRange = new Mat(); 
    mSinRange = new Mat(); 
    Core.inRange(mH, lowerBoundH, upperBoundH, mHinRange); 
    Core.inRange(mS, lowerBoundS, upperBoundS, mSinRange); 
    Mat filtered = new Mat(hsvFrame.height(), hsvFrame.width(), CvType.CV_8UC1, new Scalar(4)); 

    Core.bitwise_and(mHinRange, mSinRange, filtered); 
    Mat aux = new Mat(); 
    Mat mRgb = new Mat(); 
    inputFrame.copyTo(mRgb); 
    Imgproc.cvtColor(filtered, mRgb, Imgproc.COLOR_GRAY2BGR, 0); 
    Imgproc.cvtColor(mRgb, aux, Imgproc.COLOR_BGR2RGBA, 0); 

    return aux; 
}else{ 
    Log.v("NULL","H OR S CHANNELS ARE NULL"); 
    return null; 
} 

그렇다면, I 변환하므로 같은 ImageView에 표시하기 위해 BitmapMat 분단 :

,617,451 VI는은 (I 전용 채널 H & S 작동) 다음을 수행
Bitmap bmp = null; 
Mat tmp = new Mat(result.height(),result.width(), CvType.CV_8UC1, new Scalar(4)); 
try { 
    bmp = Bitmap.createBitmap(tmp.cols(), tmp.rows(), Bitmap.Config.ARGB_8888); 
    Utils.matToBitmap(tmp, bmp); 
}catch (CvException e){Log.d("Exception",e.getMessage());} 
qrImage.setImageBitmap(bmp); 

그러나 결과 이미지를 표시 할 때 완전히 검은 색 이미지가 나타납니다. 카메라가 구분하고자하는 색상의 물체에 직접 마주보고 있기 때문에 이것이 잘못된 것입니다.

내가 뭘 잘못하고 있니?

답변

1

어리석은 실수. 비트 맵을 비어있는 tmp 매트에서 생성했습니다.

Bitmap bmp = null; 
try { 
    bmp = Bitmap.createBitmap(result.cols(), result.rows(), Bitmap.Config.ARGB_8888); 
    Utils.matToBitmap(result, bmp); 
}catch (CvException e){Log.d("Exception",e.getMessage());} 
qrImage.setImageBitmap(bmp); 
:

대신에, 나는 result 매트를 사용하여 작성해야합니다

관련 문제