有什么方法可以使用 JavaCV 将我的车牌号涂成黑色吗?

Is there any way to paint my plate numbers to black using JavaCV?

嗨,我两天前开始使用 JavaCV,

我正在尝试在 Java SE 和 Maven 下的 git 存储库中创建一个 ANPR Open Source System

我已经检测到我的板矩形,现在我正在尝试为 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);
 ...}

谢谢

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

我选择了 40 的阈值水平来区分数字。