【发布时间】:2017-08-15 20:09:39
【问题描述】:
您好,我两天前开始使用 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);
...}
谢谢
【问题讨论】:
-
你能附上原始图像吗,从哪里生成这个图像?
-
反转图像:每个像素集
pixel = 255 - pixel=> 数字将是黑色的,周围是白色的。但可能不完全是你想要的 ;) -
@ZdaR 这里是原始图像,感谢您检查我的存储库中的项目以进一步理解我使用 Segmentation.toB_A_W() 然后调用 Logique.toB_W()
-
@MohammedHousseynTaleb 您可以考虑采用阈值并将其作为 OCR 的输入
-
@JeruLuke 我的 OCR 在读取数字(1 和 7)(6 和 5)时遇到了很大的麻烦。我正在使用 javaOCR 我仍在尝试解决此问题,但欢迎提供任何帮助(我需要所有想法和知识,因为我没有导师)。
标签: java opencv ocr javacv anpr