Threshold image using opencv (Java)
adaptiveThreshold
is the right choice here. Just need a litte tuning.
With these parameters (it's C++, but you can easily translate to Java)
Mat1b gray= imread("path_to_image", IMREAD_GRAYSCALE);
Mat1b result;
adaptiveThreshold(gray, result, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, 40);
the resulting image is:
Bee Bee
Updated on July 05, 2022Comments
-
Bee Bee almost 2 years
I am working with Opencv for my project. I need to convert the image below to threshold image
I tried this function:
Imgproc.threshold(imgGray, imgThreshold, 0, 255, Imgproc.THRESH_BINARY + Imgproc.THRESH_OTSU);
But the result was not so good, as you see below
So I tried the
adaptiveThreshold function
:Imgproc.adaptiveThreshold(imgGray, imgThreshold, 255, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, Imgproc.THRESH_BINARY, 11, 2);
and it resulted:
I just expect a binary image with white background and black text only, no black area or noise ( I do not prefer using
Photo.fastNlMeansDenoising
because it takes a lot of time). Please help me with a solution for this.Also, I am using
Tesseract
for Japanese recognization but the accuracy rate is not good. Do you have any suggestion on better OCR for Japanese, or any method to improve Tesseract quality? -
Bee Bee almost 9 yearsThank you very much. This work perfectly for me. I just dont understand the meaning of the last parameter (40). Could you pls explain this?
-
Miki almost 9 years@BeeBee It's a constant subtracted from the mean. Read opencv doc for further information
-
M.Yogeshwaran over 4 yearscan show me the java code here even in kotlin is fine need to remove shadow from image
-
helloworld almost 4 years@Miki I get cannot resolve Mat1b in AndroidStudio and there are no suggestions either. I'm using OpenCV4.2. Could you please suggest how/where to resolve this?
-
remo about 2 yearsMat is defined in org.opencv.core .