Ответ 1
У меня была такая же проблема. Я считаю, что проблема заключается в том, что основное изображение является 1-канальным, а не 3-канальным. Поэтому вам нужно установить цвет так, чтобы он был ненулевым в первом элементе (например, (255,0,0)).
Я следовал руководству на этой странице, но, кажется, ничего не происходит, когда выполняется строка 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-канальным, а не 3-канальным. Поэтому вам нужно установить цвет так, чтобы он был ненулевым в первом элементе (например, (255,0,0)).
У меня тоже была та же проблема. Дело в том, что это видно, но слишком темно для наших глаз. Решение: измените цвет с (0,255,0) (по какой-то странной причине, я тоже дал точно такой же цвет!) до (128,255,0) (или какой-то более яркий цвет)
Вам нужно что-то сделать:
cv2.drawContours(im,contours,-1,(255,255,0),3)
cv2.imshow("Keypoints", im)
cv2.waitKey(0)
Я предполагаю, что ваше оригинальное изображение в серой битовой плоскости. Поскольку ваша битовая плоскость - серый, а не BGR, и поэтому контур не отображается. Потому что это слегка черный и серый, который вы не можете различить. Здесь простое решение [Преобразование битовой плоскости]:
im=cv2.cvtColor(im,cv2.COLOR_GRAY2BGR)
cv2.drawContours(im,contours,-1,(0,255,0),3)