OpenCV附加imag的一部分

2024-04-25 21:09:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张白底黑字的扫描文档图像。我首先反转图像,使背景=黑色,所有文本=白色。在

然后我使用OpenCV的reduce()函数在图像上给我一个垂直投影,看起来有点像:(图像中每一行的所有像素值的总和)

0,
0,
0,
434
34
0,
0,

由此,我可以看出0像素值表示背景,而值>0表示有一些文本。在

从这里开始,我在像素值中循环寻找下一个值中的任何0值!=0(下一个值是包含文本)并将位置存储在一个双元组列表中,即pairedCoordinates[(23, 43), (54, 554)]等。。。在

从这一点开始,我可以循环pairedCoordinates并在我感兴趣的区域周围绘制{}:

^{pr2}$

到目前为止,一切正常。接下来我要做的是,对于每个矩形,将其内部内容(像素)附加到另一个列表中,这样我就可以只对矩形中包含的图像部分执行进一步的计算。在

我尝试了以下几点:

^{3}$

然后在上面的for循环中,我添加了额外的:

for start, finish in pairedCoordinates:
    height = finish - start
    cv2.rectangle(small, (0, start), (0+cols, start + height), (255, 255, 255), 1)

    # cols = the number of collumns in the image, small being the image
    glyph = small[y: start + height, x:0+cols] 
    roi.append(glyph)

在尝试此代码时,我得到了“未解析的x&y引用,我有点不确定为什么”。在

有人能给我指出一个正确的方向,如何真正实现我上面所解释的。在

更新 正如Miki在评论中提到的,我忘记了初始化x,y。 在计算字形之前,我简单地定义了x=0 y=0,这似乎起到了作用。在

我有一些问题循环通过每一个领域和写他们到一个文件。不是每个边界矩形都被单独写入,而是每个新创建的图像文件只是将下一个像素附加到现有图像上?在

for i, r in enumerate(roi):
    cv2.imwrite("roi_%02d.png" % i, r)

Tags: thein图像文本列表for像素start