OpenCV-文本分割中的字母轮廓分离
我一直在研究图像数据集中的文本识别。我想使用组件分割图像的特征,并找到阈值图像的轮廓。但是,许多字符彼此合并,并与图像中的其他组件合并 你能告诉我如何把它们分开吗?谢谢你的帮助 下面是一些示例和我的部分代码:OpenCV-文本分割中的字母轮廓分离,opencv,image-processing,ocr,contour,opencv-contour,Opencv,Image Processing,Ocr,Contour,Opencv Contour,我一直在研究图像数据集中的文本识别。我想使用组件分割图像的特征,并找到阈值图像的轮廓。但是,许多字符彼此合并,并与图像中的其他组件合并 你能告诉我如何把它们分开吗?谢谢你的帮助 下面是一些示例和我的部分代码: Mat placa_contornos = processContourns(img_placa_adaptativeTreshold_mean); vector<vector<Point>> contours_placa; findContours(placa_c
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);
Mat placa_contornos=processContourns(img_placa_AdaptiveTreshold_平均值);
矢量等值线;
findContours(康托诺斯广场,
普莱卡,
CV_RETR_外部、外部)
CV_链_约_无);
vector::iterator itc=等高线_placa.begin();
while(itc!=等高线_placa.end()){
//创建对象的边界矩形
Rect mr=边界Rect(Mat(*itc));
矩形(图像平面,磁共振,标量(0,255,0));
++国贸中心;
}
imshow(“placa con rectangles”,imagem_placa_cor);
我会尝试进一步腐蚀二进制图像,看看这是否有帮助。您可能还希望尝试修复倾斜,然后删除连接字母的底线 此外,这可能与此相关:您可以尝试在阈值图像上使用一个新的阈值来消除噪声。您可以根据需要调整内核大小
// 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);
它在阈值图像上提供以下中间输出,我想这会提高检测效果
如果你把原始图像和二值化图像放在一起也会有帮助。谢谢你的评论@like444,在描述中我放了一张带有一张原始图像的图像,结果是这样的。谢谢你的帮助。你也可以试试Skeletonization你能达到你想要的吗?谢谢@brad,我有很多图像,上面和下面都有线条,我也想消除,我怎么才能消除线条?当我处理类似的问题时,我能够检查垫子的每一行,看看它是否有很多白色像素,表示水平线的。但是,只有在能够纠正倾斜或角度恒定的情况下,此方法才可能有效。否则,另一种测线方法可能会起作用