ruby - 我如何使用 ImageMagick 检测水平黑线?

标签 ruby image-processing image-manipulation

所以我有一个本质上是 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/

相关文章:

ruby - 如果我在 Ruby 中定义一个方法,它属于任何类吗?

ruby-on-rails - LoadError : libncursesw. so.5: 无法打开共享对象文件: 没有那个文件或目录

matlab - matlab中3d矩阵与向量的相关性

python - 如何从 OpenCV Python 中的特征匹配中获取像素坐标

c++ - 盲解卷积算法题

ruby-on-rails - Ruby:如何在 fixture 中配置枚举?

ruby - 从空白的数组中删除所有项目

java - facebook风格图像调整大小java

c# - 在 C# 中将 Bmp 转为 jpg/png

image-processing - 从图像中提取满足特定条件的形状