2

嗨我两天前开始使用JavaCV,

我正在尝试在 Java SE 和 Maven 下的 git 存储库中创建ANPR 开源系统。

我已经检测到我的矩形板,现在我正在尝试为 OCR 读取准备一个好的图像。

原始图像:

在此处输入图像描述

现在我已经获得了这张图片:

当前图像,

有没有办法使用 JavaCv 将我的车牌号变黑?我一点也不知道如何使用 javacv 函数来做到这一点。

在这里,我为您提供产生此结果的方法:

首先我在模糊后称之为

public void toB_A_W(JLabel jLabel){
        Mat rgbImage = Imgcodecs.imread(original);
         Mat destination = new Mat(rgbImage.rows(), rgbImage.cols(), rgbImage.type());
        // l objectif et de corriger les erreur de la transformation en noire et blan
        int dilation_size = 2;

         // la matrice de la dilatation on cherche a dilater en forme de rectange ( Imgproc.MORPH_RECT )   
        Mat element1 = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(dilation_size + 1, dilation_size + 1));
        // on dilate l image
        Imgproc.dilate(rgbImage, destination, element1);


        Mat labImage = new Mat();
        cvtColor(destination, labImage, Imgproc.COLOR_BGR2GRAY);
        Imgcodecs.imwrite(ocrReadFrom, labImage);
        jLabel.setIcon(new ImageIcon(ocrReadFrom));
        JOptionPane.showConfirmDialog(null, "");
  }

然后我称之为:

public void toB_W(JLabel jLabelBlackAndWhiteImage) {
    // cella est l image de l ocr
    smouthedImage = opencv_imgcodecs.cvLoadImage(ocrReadFrom);
     blackAndWhiteImageOCR = opencv_core.IplImage.create(smouthedImage.width(),
            smouthedImage.height(), IPL_DEPTH_8U, 1);
     // la fonction qui va executé la transformation en noire et blan
    System.out.println("0");
    //cvAdaptiveThreshold(smouthedImage, smouthedImage, 255, CV_ADAPTIVE_THRESH_GAUSSIAN_C, opencv_imgproc.CV_THRESH_MASK, 15, -2);
     opencv_imgproc.cvSmooth(smouthedImage, smouthedImage);
    System.out.println("1");
    cvCvtColor(smouthedImage, blackAndWhiteImageOCR, CV_BGR2GRAY);
    System.out.println("2");
    cvAdaptiveThreshold(blackAndWhiteImageOCR, blackAndWhiteImageOCR, 255, CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY_INV, 17, -4);
    System.out.println("3");
     opencv_imgproc.cvSmooth(blackAndWhiteImageOCR, blackAndWhiteImageOCR);
    // fin de la transformation 
    cvSaveImage(ocrReadFrom, blackAndWhiteImageOCR);
 ...}

谢谢

4

1 回答 1

3

您想填写数字,您可以考虑执行二进制阈值而不是自适应阈值

我选择了40的阈值水平以使数字不同。

在此处输入图像描述

于 2017-03-23T12:46:45.350 回答