OpenCV - 在文本分段中分离字母轮廓

时间:2017-01-25 20:48:06

标签: opencv image-processing ocr contour opencv-contour

我一直在图像数据集中处理文本识别。我想使用组件分割图像的字符并找到阈值图像的轮廓。但是,许多字符彼此合并并与图像中的其他组件合并。

你能给我一些分离它们的想法吗?谢谢您的帮助!

以下是一些示例,以及我的部分代码:

Mat placa_contornos = processContourns(img_placa_adaptativeTreshold_mean);
vector<vector<Point>> contours_placa;
findContours(placa_contornos,
             contours_placa, 
             CV_RETR_EXTERNAL, externos)
             CV_CHAIN_APPROX_NONE); 
vector<vector<Point> >::iterator itc = contours_placa.begin();
while (itc != contours_placa.end()) {
    //Create bounding rect of object
    Rect mr = boundingRect(Mat(*itc));
    rectangle(imagem_placa_cor, mr, Scalar(0, 255, 0));
    ++itc;
}
imshow("placa con rectangles", imagem_placa_cor);

Results examples

original image, binarized image, result

2 个答案:

答案 0 :(得分:0)

我会尝试更多地侵蚀二进制图像,看看是否有帮助。您可能还想尝试修复倾斜,然后删除连接字母的底线

此外,这可能是相关的:Recognize the characters of license plate

答案 1 :(得分:0)

您可以在阈值图像上尝试opening operation以消除噪音。您可以根据需要调整内核大小。

// Get a rectangular kernel with size 7
Mat element = getStructuringElement(0, Size(7, 7), Point(1, 1));
// Apply the morphology operation
morphologyEx(placa_contornos, result, CV_MORPH_OPEN, element);

它在您的阈值图像上提供以下中间输出,我想这会改善您的检测。

enter image description here