Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV-文本分割中的字母轮廓分离_Opencv_Image Processing_Ocr_Contour_Opencv Contour - Fatal编程技术网

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,我有很多图像,上面和下面都有线条,我也想消除,我怎么才能消除线条?当我处理类似的问题时,我能够检查垫子的每一行,看看它是否有很多白色像素,表示水平线的。但是,只有在能够纠正倾斜或角度恒定的情况下,此方法才可能有效。否则,另一种测线方法可能会起作用