opencv - plot contours in an image
13,613
Solution 1
You need to draw on the original image, not on the one returned from findContuors()
. The following works.
# Contoured image
ret,thresh = cv2.threshold(imgray, 120,255,cv2.THRESH_BINARY)
contours = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)[-2]
for contour in contours:
cv2.drawContours(im, contour, -1, (0, 255, 0), 3)
plt.figure()
plt.imshow(im)
Solution 2
This is my result:
## Read and convert
img = io.imread('http://matlabtricks.com/images/post-35/man.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
## Find outer contours
_, cnts, _= cv2.findContours(gray,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
## Draw
canvas = np.zeros_like(img)
cv2.drawContours(canvas , contours, -1, (0, 255, 0), 1)
plt.imshow(canvas)
Author by
learner
Updated on July 12, 2022Comments
-
learner almost 2 years
I am trying to draw contour around an image. I can see that contours being found but I am not able to draw the outline. The color of the contour seem to be either of the two (black and white) colors.
import cv2 import numpy as np import matplotlib.pyplot as plt from skimage import io %matplotlib inline im = io.imread('http://matlabtricks.com/images/post-35/man.png') plt.imshow(im) imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY) plt.figure() plt.imshow(imgray) #Contoured image ret,thresh = cv2.threshold(imgray, 120,255,cv2.THRESH_BINARY) image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) c_img = cv2.drawContours(image, contours, -1, (0, 255, 0), 1) plt.figure() plt.imshow(c_img)