【问题标题】:OpenCV drawContours always draws in whiteOpenCV drawContours 总是以白色绘制
【发布时间】:2021-12-25 02:30:07
【问题描述】:

我正在尝试以随机颜色绘制从 cv2.threshold 获得的轮廓。 这是我的代码。

    for c in contours:
        color = list(np.random.rand(3)*255)
        color = [int(color[0]), int(color[1]), int(color[2])]
        #color = [255, 0,0]
        cv2.drawContours(mosaic, [c], 0, color, 3)

但是轮廓总是用白色绘制的。不,我的图像不是灰度的,因为当我取消注释 color = [255, 0,0] 行时,轮廓以蓝色(或任何其他颜色)绘制,当我执行 color[1] += 20 之类的操作时,每次迭代都会按预期修改颜色。只有当我使用我的代码时,它才会被绘制成白色。打印时,变量颜色会按预期输出 [b,g,r] 值列表。我尝试使用元组、np 数组而不是列表来处理不同的数据类型,但无济于事。

有什么想法吗? 谢谢

【问题讨论】:

  • 我认为您需要在每次迭代时更改随机值的种子值,否则每次迭代都会绘制相同的颜色。见docs.scipy.org/doc/numpy-1.15.1/reference/generated/…
  • 好主意,但没有。我检查了输出。所有的颜色都不一样,没有一个是白色的。
  • 你能提供最小可重复的例子吗?帮助你会更容易
  • 您提出的 np.random 用法是可以接受的。无需更改它。 -- 抱歉,no,不要在循环中设置种子值。不是这样的。

标签: python numpy opencv


【解决方案1】:

我想通了。图像是 float64,我猜它在 opencv 中的值范围可能较小,所以当我将它传递给类似 [120, 100, 90] 的东西时,它超出了范围并将其绘制为白色。我将它设置为 uint8,现在它可以工作了。 仍然没有解释为什么当传递 [255, 0, 0] 之类的东西时它会正确绘制颜色。

【讨论】:

  • 哦,如果 opencv 在 [0,1] 范围内解释 float64,通过 [255, 0, 0] 只会炸毁蓝色通道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-15
  • 1970-01-01
  • 2017-05-20
  • 1970-01-01
  • 2015-08-05
  • 2019-02-01
  • 2017-05-16
相关资源
最近更新 更多