所以我有一个本质上是 TIFF 格式的电子表格。它有一些统一性……例如,所有列宽都相同。我想通过那些已知的列宽来取消对这张表的限制,并基本上创建许多小图形文件,每个单元格一个,然后在它们上运行 OCR 并将其存储到数据库中。问题是水平线的高度并不相同,所以我需要使用某种图形库命令来检查每个像素是否都是相同的颜色(即黑色)。如果是这样,那么我就知道我已经达到了单元格的高度分隔符。我该怎么做呢? (我正在使用 RMagick)
最佳答案
使用image#get_pixel
:http://www.simplesystems.org/RMagick/doc/image2.html#get_pixels
警告:那些文档是旧的,所以它可能在新版本中发生了变化。使用 $ gem server
查看您自己的 rdoc,假设它们有 rdoc。
image#rows
给你图像的高度,然后你可以做类似的事情(未经测试):
def black_line?(pixels)
pixels.each do |pixel|
unless pixel.red == 0 && pixel.green == 0 && pixel.blue == 0
return false
end
end
true
end
black_line_heights = []
height = image.rows
width = image.columns
height.times do |y|
pixels = image.get_pixel(0,y,width,1)
black_line_heights << y if black_line?(pixels)
end
请记住,我不确定该 API。查看较旧的文档,我现在无法对其进行测试。但它看起来像你会采取的一般方法。顺便说一句,它假设行边界是 1 像素厚。如果不是,请将 1
更改为实际厚度,这可能足以使其按您预期的方式工作。
关于ruby - 我如何使用 ImageMagick 检测水平黑线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2641022/