我有一个像这样的 Talmud 页面:
我想找到文本区域opencv以获得这样的结果,每个文本都将像这样自己:
在附图中,每个区域用不同的颜色标记,并且文本有一个数字,重要的是识别属于每个文本的区域,并将其与属于另一个文本的区域区分开来,数字顺序无关紧要.
根据文本之间的白色条纹,用眼睛做这件事真的很容易,但我试图用眼睛做,但我opencv做不到。
在下面的代码中,我尝试捕捉所有字母并将它们变成黑色矩形,然后放大每个矩形以与相邻的矩形相遇,因此整个文本区域将是黑色的,并且文本之间将有一个清晰的白色条纹。
我不知道如何进行,以及它是否是一个好方法。
public List<Rectangle> getRects(Mat grayImg)
{
BlobCounter blobCounter = new BlobCounter();
blobCounter.ObjectsOrder = ObjectsOrder.None;
blobCounter.ProcessImage(grayImg);
IEnumerable<Blob> blobs = blobCounter.GetObjectsInformation();
var blackBlobs = grayImg.Clone;
foreach (var b in blobs)
blackBlobs.Rectangle(b.Rectangle.ToCvRect, Scalar.Black, -1);
var widths = blobs.Select(X => X.Rectangle.Width).ToList;
widths.Sort();
var median = widths(widths.Count / (double)2);
Mat erodet = new Mat();
Cv2.Erode(grayImg, erodet, null, iterations: median);
using (Window win = new Window())
{
win.ShowImage(erodet);
win.WaitKey();
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢,任何帮助将不胜感激。
补充说明:
正如您在上图中所看到的,文本区域不是矩形,但这些区域可以描述为一堆不同大小的矩形的集合,一个叠一个。
请注意,当两个矩形属于同一个文本时,不要将一个矩形与另一个矩形相邻排列,而只能将一个矩形放在另一个矩形之上。 …
ocr opencv image-processing computer-vision image-segmentation