【问题标题】:Python opencv drawContours does not show anythingPython opencv drawContours 不显示任何内容
【发布时间】:2014-03-03 02:09:12
【问题描述】:

我按照this page 的教程进行操作,但在执行cv2.drawContours(im,contours,-1,(0,255,0),3) 行时似乎没有任何反应。我期待看到带有绿色轮廓的star.jpg,如教程中所示。这是我的代码:

import numpy as np
import cv2

im = cv2.imread('C:\Temp\ip\star.jpg')
print im.shape #check if the image is loaded correctly
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,127,255,0)
contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(im,contours,-1,(0,255,0),3)
pass

没有错误消息。 star.jpg 是上述网页中的星星。 我正在使用 opencv 版本 2.4.8 和 Python 2.7。

drawContours 是否应该在我的屏幕上显示图像?如果是这样,我做错了什么?如果没有,如何显示图像?

谢谢

编辑:

添加以下行将显示图像:

cv2.imshow("window title", im)
cv2.waitKey()

waitKey() 是必需的,否则窗口将只显示灰色背景。根据this post,这是因为 waitKey() 告诉它开始处理 WM_PAINT 事件。

【问题讨论】:

  • drawContours(.) 将轮廓绘制到图像上。它不会在屏幕上显示。调用 drawContours(.) 后,您必须显示图像 im 才能看到它。

标签: python opencv


【解决方案1】:

我有同样的问题。我认为问题在于底层图像是 1 通道而不是 3 通道。因此,您需要设置颜色,使其在第一个元素中不为零(例如 (255,0,0))。

【讨论】:

  • 你也可以通过color=255
【解决方案2】:

我猜你的原始图像是灰色位平面。由于您的位平面是灰色而不是 BGR,因此轮廓没有出现。因为它有点黑色和灰色,你无法区分。这是简单的解决方案[通过转换位平面]:

im=cv2.cvtColor(im,cv2.COLOR_GRAY2BGR)
cv2.drawContours(im,contours,-1,(0,255,0),3)

【讨论】:

    【解决方案3】:

    我也有同样的问题。问题是它显示了,但太暗了,我们的眼睛看不见。 解决方案: 将颜色从 (0,255,0) (出于某种奇怪的原因,我也给出完全相同的颜色!)更改为 (128,255,0) (或更好的更亮的颜色)

    【讨论】:

    • 神奇的是,这是真正的解决方案。
    【解决方案4】:

    你必须做一些事情来达到以下效果:

    cv2.drawContours(im,contours,-1,(255,255,0),3)
    cv2.imshow("Keypoints", im)
    cv2.waitKey(0)
    

    【讨论】:

      猜你喜欢
      • 2015-10-07
      • 1970-01-01
      • 2021-07-13
      • 2021-12-24
      • 1970-01-01
      • 2012-09-29
      • 2020-11-10
      • 2012-04-12
      • 2019-11-11
      相关资源
      最近更新 更多