【问题标题】:Matlab function (improfile) in OpenCV - Python 2.7OpenCV中的Matlab函数(improfile) - Python 2.7
【发布时间】:2014-06-30 19:51:43
【问题描述】:

我要做的是在二进制图像上生成两条线(一条垂直,一条水平)。然后返回所有行/列值以及该行下方的像素值,并将它们放入 python 列表中。

在 matlab 中,您可以通过在二进制图像上运行 improfile() 来实现类似的操作,您可以将二进制图像设置为 im2bw(image,10/255) 的“10/255”像素值。

Python 中的 opencv 甚至可以做到这一点吗?

【问题讨论】:

    标签: python matlab python-2.7 opencv


    【解决方案1】:

    OpenCV(模块cv2)图像可以被处理为numpy.arrays。

    因此,如果您首先要将图像转换为黑白:

    bwimg = image > 10
    

    这会根据 bwimg 中的相应元素是否超过 10 来创建一个 True/False 值数组。如果您从文件中读取图像,强度缩放通常在 0..255 之间。 (也可能是其他值。)

    如果您想要在水平线上从像素 (23,57) 到 (86,57) 获取值,您只需从数组中选择相应的值:

    pixels = bwimg[57, 23:87]
    

    现在您有了一个 True/False 值数组。如果您希望有数字,请将其乘以 1:

    pixels = 1 * bwimg[57, 23:87]
    

    竖线也是这样:

    pixels = bwimg[2:65, 47]
    

    在第 47 列选取像素 2..64(注意不包括范围的末端)。

    Matlab 用户的注意事项:Python 数组索引从 0 开始。

    【讨论】:

    • 太棒了!是否可以查看这些 numpy 数组并找到像素数组中第一个/最后一个“True”值的 x,y 位置?我只是想找到每个水平/垂直配置文件中像素 > 10 的开始位置。谢谢!
    • @Spatial Pariah:有几种方法。如果您在v 中有您的个人资料,您将通过:nz=numpy.nonzero(v)[0] 获得所有非零(非 False)的列表。如果您想查看此列表的第一个,请使用nz[0],对于最后一个,请使用nz[-1]。 (您可以通过简单地使用 numpy.nonzero(x>10) 将其应用于非 BW 图像。这将返回 x 中所有大于 10 的元素的索引。
    【解决方案2】:

    OpenCV的C接口有cvSampleLine function那个

    获取属于指定线段的像素并存储 他们到缓冲区。

    【讨论】:

      猜你喜欢
      • 2019-12-15
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      • 2015-07-24
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      • 2017-04-11
      相关资源
      最近更新 更多