Android openCV - 반전영상 구현하기(Negative Image)
아래의 예제는 링크의 소스를 베이스로 해서 진행되고 있습니다.
http://technote.tistory.com/3
실행결과 (원본, 반전영상)
1) 직접계산해서 반전영상 만드는 방법
1. 반전영상에 사용할 Image를 Bitmap 변수에 저장.
if(mBitmap != null){
img_input = new Mat();
img_output = new Mat();
Utils.bitmapToMat(mBitmap,img_input);
convertNativeLibtoNegative(img_input.getNativeObjAddr(),img_output.getNativeObjAddr());
Utils.matToBitmap(img_output,mBitmap);
mImgViewResult.setImageBitmap(mBitmap);
}
2. JNI 부분에서 아래처럼 추가 하면 됩니다.
JNIEXPORT jint JNICALL
Java_opencvtest_com_lge_opencvtest_MainActivity_convertNativeLibtoNegative(JNIEnv*, jobject, jlong addrInput, jlong addrResult) {
Mat &img_input = *(Mat *) addrInput;
Mat &img_result = *(Mat *) addrResult;
int conv = processToNegative(img_input, img_result);
int ret = (jint) conv;
return ret;
}
int processToNegative(Mat img_input, Mat &img_result)
{
cvtColor( img_input, img_result, CV_RGBA2GRAY);
Mat srcImage = img_result;
if(srcImage.empty())
LOGD("%s : empty!",__FUNCTION__);
Mat_<uchar>image(srcImage);
Mat_<uchar>destImage(srcImage.size());
for(int y = 0 ; y < image.rows ; y++){
for(int x = 0 ; x < image.cols; x++){
uchar r = image(y,x);
destImage(y,x) = 255 -r;
}
}
img_result = destImage.clone();
return(0);
}
2) <추가>LUT Table을 이용해서 반전영상 만드는 방법
int processToNegativeLUT(Mat img_input, Mat &img_result){
cvtColor(img_input,img_result,CV_RGB2GRAY);
Mat srcImage = img_result;
if(srcImage.empty()){
LOGD("%s : empty!",__FUNCTION__);
}
Mat_<uchar> lut(1,256);
for(int i = 0 ; i < 256 ; i++)
lut(i) = 256-i;
Mat destImage;
LUT(srcImage,lut,destImage);
img_result = destImage.clone();
return (0);
}
'Programmer > openCV for Android' 카테고리의 다른 글
Android openCV #6 - bilateral Filter 적용하기 (1) | 2017.04.16 |
---|---|
Android openCV #5 - BoxFilter 적용하기 (Filter 기본설명포함) (0) | 2017.04.16 |
Android openCV #4 - 임계값 영상 구현하기 (Threshold Image) (0) | 2017.02.28 |
Android openCV #2 - android studio에서 JNI debugging log 출력 (0) | 2017.02.28 |
Android openCV #1 - Android Studio 에서 openCV 개발환경 세팅하기(링크) (0) | 2017.02.17 |
댓글