java - 有没有办法使用 JavaCV 将我的车牌号涂成黑色?

标签 java opencv ocr javacv automatic-license-plate-recognition

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

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

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

原始图像:

enter image description here

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

current Image ,

有没有办法使用 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 以使数字清晰。

enter image description here

关于java - 有没有办法使用 JavaCV 将我的车牌号涂成黑色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42973210/

相关文章:

python - cv2.createBackgroundSubtractorMOG2() 错误

ios - 超正方体 OCR "WARNING: Image has not size!"

java - 访问打包成jar文件的文件

java - 字符串文字池的工作原理

java - 获取vimeo api的签名

python - 从 OpenCV python 读取图像后提供图像后出现类型错误

c++ - ELF 包含 NEON 或 VFP3 指令?

java - Java中的文件截断操作

machine-learning - CNN 上的数字识别

tensorflow - 将 tensorflow 数据格式从 nhwc( channel 在后)切换到 nchw( channel 在前)时出现问题