我有一张白底黑字的扫描文档图像。我首先反转图像,使背景=黑色,所有文本=白色。在
然后我使用OpenCV的reduce()
函数在图像上给我一个垂直投影,看起来有点像:(图像中每一行的所有像素值的总和)
0,
0,
0,
434
34
0,
0,
由此,我可以看出0像素值表示背景,而值>0表示有一些文本。在
从这里开始,我在像素值中循环寻找下一个值中的任何0值!=0(下一个值是包含文本)并将位置存储在一个双元组列表中,即pairedCoordinates
:[(23, 43), (54, 554)]
等。。。在
从这一点开始,我可以循环pairedCoordinates
并在我感兴趣的区域周围绘制{
到目前为止,一切正常。接下来我要做的是,对于每个矩形,将其内部内容(像素)附加到另一个列表中,这样我就可以只对矩形中包含的图像部分执行进一步的计算。在
我尝试了以下几点:
^{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)
目前没有回答
相关问题 更多 >
编程相关推荐