Click here to Skip to main content
15,886,806 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hello i am new to opencv and i want to use CLAHE in my app but i don't know.please help me.i tried following code

C#
int lnth = grayscale.getByteCount();

                ByteBuffer dst = ByteBuffer.allocate(lnth);
                grayscale.copyPixelsToBuffer(dst);
                byte[] byteArray = dst.array();

                Log.e("byte array", byteArray + "");
                Mat orgImage = new Mat();
                orgImage.put(0, 0, byteArray);

                Mat labImage = new Mat(grayscale.getHeight(), grayscale.getWidth(), CvType.CV_8UC1);
                Imgproc.cvtColor(orgImage, labImage, Imgproc.COLOR_BGR2Lab);

                CLAHE clahe = Imgproc.createCLAHE();
                CLAHEmat = new Mat(grayscale.getHeight(), grayscale.getWidth(), CvType.CV_8UC1);
                clahe.apply(labImage, CLAHEmat);

                Utils.matToBitmap(CLAHEmat, histogram);


but it shows error:

Java
E/cv::error(): OpenCV Error: Assertion failed ((scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F)) in void cv::cvtColor(cv::InputArray, cv::OutputArray, int, int), file /builds/master_pack-android/opencv/modules/imgproc/src/color.cpp, line 8175
04-14 12:59:47.420 2085-2085/? E/org.opencv.imgproc: imgproc::cvtColor_11() caught cv::Exception: /builds/master_pack-android/opencv/modules/imgproc/src/color.cpp:8175: error: (-215) (scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F) in function void cv::cvtColor(cv::InputArray, cv::OutputArray, int, int)
04-14 12:59:47.437 2085-2085/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                 Process: com.atlassoftweb.omrsample, PID: 2085
                                                 CvException [org.opencv.core.CvException: cv::Exception: /builds/master_pack-android/opencv/modules/imgproc/src/color.cpp:8175: error: (-215) (scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F) in function void cv::cvtColor(cv::InputArray, cv::OutputArray, int, int)
                                                 ]


What I have tried:

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import org.opencv.android.Utils;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Scalar;
import org.opencv.imgproc.CLAHE;
import org.opencv.imgproc.Imgproc;

import java.nio.ByteBuffer;

public class sample extends AppCompatActivity {

ImageView img;
Bitmap original, grayscale, histogram, resize, threshold;
int fixedwidth = 480;
int fixedheight = 800;
Button btn_original, btn_grayscale, btn_histogram, btn_resize, btn_threshold;
Mat rgbMat;
Mat grayMat;
Mat CLAHEmat;

static {
System.loadLibrary("opencv_java3");
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

img = (ImageView) findViewById(R.id.imageView);

btn_original = (Button) findViewById(R.id.btn_original);
btn_grayscale = (Button) findViewById(R.id.btn_grayscale);
btn_histogram = (Button) findViewById(R.id.btn_histogram);
btn_resize = (Button) findViewById(R.id.btn_resize);
btn_threshold = (Button) findViewById(R.id.btn_threshold);

original = BitmapFactory.decodeResource(getResources(), R.drawable.sample);

btn_original.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
img.setImageBitmap(original);
}
});

btn_grayscale.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/*grayscale = getGrayscale(original);
img.setImageBitmap(grayscale);*/
grayscale = BitmapFactory.decodeResource(getResources(), R.drawable.sample);

rgbMat = new Mat();
Utils.bitmapToMat(grayscale, rgbMat);

grayMat = new Mat(grayscale.getHeight(), grayscale.getWidth(),
CvType.CV_8U, new Scalar(1));
Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY, 1);
Utils.matToBitmap(grayMat, grayscale);
img.setImageBitmap(grayscale);
Log.e("Width & Height:-", grayscale.getWidth() + "-" + grayscale.getHeight());
}
});

btn_histogram.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//histogram=HistogramEqualization.histogramEqualization(resize);

int lnth = grayscale.getByteCount();

ByteBuffer dst = ByteBuffer.allocate(lnth);
grayscale.copyPixelsToBuffer(dst);
byte[] byteArray = dst.array();

Log.e("byte array", byteArray + "");
Mat orgImage = new Mat();
orgImage.put(0, 0, byteArray);

Mat labImage = new Mat(grayscale.getHeight(), grayscale.getWidth(), CvType.CV_8UC1);
Imgproc.cvtColor(orgImage, labImage, Imgproc.COLOR_BGR2Lab);

CLAHE clahe = Imgproc.createCLAHE();
CLAHEmat = new Mat(grayscale.getHeight(), grayscale.getWidth(), CvType.CV_8UC1);
clahe.apply(labImage, CLAHEmat);

Utils.matToBitmap(CLAHEmat, histogram);
img.setImageBitmap(histogram);
}
});

btn_threshold.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.sheet);

Mat rgbMat = new Mat();
Utils.bitmapToMat(bmp, rgbMat);

Mat grayMat = new Mat(histogram.getHeight(), histogram.getWidth(),
CvType.CV_8U, new Scalar(1));
Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY, 1);
Mat bwMat = new Mat();

Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY);
Imgproc.equalizeHist(grayMat, grayMat);

Imgproc.threshold(grayMat, bwMat, 127.5, 255.0, Imgproc.THRESH_OTSU);
Utils.matToBitmap(bwMat, bmp);
Imgproc.createCLAHE();
img.setImageBitmap(bmp);
}
});
}
}
Posted
Updated 14-Apr-16 3:40am
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900