Python opencv drawContours ничего не показывает

Я следовал руководству на этой странице, но, кажется, ничего не происходит, когда выполняется строка 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() необходим, иначе окно просто покажет серый фон. Согласно этому сообщению, это потому, что waitKey() говорит ему начать обработку события WM_PAINT.

Ответ 1

У меня была такая же проблема. Я считаю, что проблема заключается в том, что основное изображение является 1-канальным, а не 3-канальным. Поэтому вам нужно установить цвет так, чтобы он был ненулевым в первом элементе (например, (255,0,0)).

Ответ 2

У меня тоже была та же проблема. Дело в том, что это видно, но слишком темно для наших глаз. Решение: измените цвет с (0,255,0) (по какой-то странной причине, я тоже дал точно такой же цвет!) до (128,255,0) (или какой-то более яркий цвет)

Ответ 3

Вам нужно что-то сделать:

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

Ответ 4

Я предполагаю, что ваше оригинальное изображение в серой битовой плоскости. Поскольку ваша битовая плоскость - серый, а не BGR, и поэтому контур не отображается. Потому что это слегка черный и серый, который вы не можете различить. Здесь простое решение [Преобразование битовой плоскости]:

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