Threshold image using opencv (Java)

24,698

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:

enter image description here

Share:
24,698
Bee Bee
Author by

Bee Bee

Updated on July 05, 2022

Comments

  • Bee Bee
    Bee Bee almost 2 years

    I am working with Opencv for my project. I need to convert the image below to threshold image

    Original 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

    threshold

    So I tried the adaptiveThreshold function:

    Imgproc.adaptiveThreshold(imgGray, imgThreshold, 255, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, Imgproc.THRESH_BINARY, 11, 2); 
    

    and it resulted:

    adaptiveThreshold

    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
    Bee Bee almost 9 years
    Thank 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
    Miki almost 9 years
    @BeeBee It's a constant subtracted from the mean. Read opencv doc for further information
  • M.Yogeshwaran
    M.Yogeshwaran over 4 years
    can show me the java code here even in kotlin is fine need to remove shadow from image
  • helloworld
    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
    remo about 2 years
    Mat is defined in org.opencv.core .