【问题标题】:opencv python cv2.line works only for certain pixel valuesopencv python cv2.line 仅适用于某些像素值
【发布时间】:2018-08-21 17:38:11
【问题描述】:

Result image link

我正在使用cv2.line 在我的图像上绘制垂直线。该命令适用于某些像素值,但不适用于所有像素值。例如,我可以通过像素 (21,1) 到 (21,450) 绘制一条线,但不能通过 (160,1) 到 (160,450) 绘制一条线。我确定我的图像大于 160 像素。我使用了不同的值,对我来说,打印行的值和不打印的值似乎是随机的。这是我的代码(我正在使用 Jupiter notebook):

new_im = cv2.cvtColor(edge, cv2.COLOR_GRAY2RGB)
cv2.line(new_im,(21,1),(21,450),(255,0,0),1)
cv2.line(new_im,(50,1),(50,450),(255,0,0),1)
cv2.line(new_im,(100,1),(100,450),(255,0,0),1)
cv2.line(new_im,(150,1),(150,450),(255,0,0),1)
cv2.line(new_im,(155,1),(155,450),(255,0,0),1)
cv2.line(new_im,(165,1),(165,450),(255,0,0),1) 
plt.imshow(new_im)
plt.show()

我也尝试更改行的顺序,但得到相同的结果。有些行被打印,有些则没有。

【问题讨论】:

  • 你能发布一张错误结果的图片吗?
  • 什么是new_im.shape
  • @w-m 输出为 (490, 190, 3)
  • @Miki !new_image
  • @ReynaRamírez 请将图片直接上传到帖子 (meta.stackexchange.com/questions/75491/…) Google 云端硬盘链接不可公开访问。并更新帖子中的示例代码,很难解析评论。

标签: python opencv jupyter


【解决方案1】:

imshow defaults 在某些后端进行最近邻插值。

如果视图小于原始图像,则可能会删除某些行并且根本不显示。

通过显式设置适当的插值字符串来修复它,例如双线性:

plt.imshow(new_im, interpolation="bilinear")

【讨论】:

    猜你喜欢
    • 2018-02-11
    • 2012-03-23
    • 1970-01-01
    • 2014-08-28
    • 2014-02-03
    • 1970-01-01
    • 2022-01-26
    • 2012-02-14
    • 2015-01-13
    相关资源
    最近更新 更多