0

It work, but my contour's color is black. How to change it to red or green?

    import numpy as np
    import cv2
    from matplotlib import pyplot as plt
    img = cv2.imread('1.jpg',0)
    img1 = cv2.imread('5.jpg',0)
    dest = cv2.subtract(img, img1)
    res = cv2.bitwise_not(dest)
    ret , threshold = cv2.threshold(res,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)          
    cv2.namedWindow('thresimage', cv2.WINDOW_NORMAL)
    cv2.imshow('thresimage',threshold)
    _, contours, hierarchy = cv2.findContours(threshold,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
    print "Number of contours detected %d -> "%len(contours)
    cv2.drawContours(threshold,contours,-1,(0,255,0),3)
    cv2.namedWindow('contour', cv2.WINDOW_NORMAL)
    cv2.imshow('contour',threshold)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

enter image description here

1 Answer 1

2

First:

contours, hierarchy = cv2.findContours(threshold,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)[-2:]

Second

ret , threshold = cv2.threshold(res,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) 
# ...
cv2.drawContours(threshold,contours,-1,(0,255,0),3)

You draw in color (0,255,0) on binary threshed image, then it will always be the first element 0, that's black. You should convert gray to BGR first, then draw color.

canvas = cv2.cvtColor(threshold, cv2.COLOR_GRAY2BGR)
cv2.drawContours(canvas,contours,-1,(0,255,0),3)
Sign up to request clarification or add additional context in comments.

2 Comments

Thank you very much! It work, but i can't see the contours after draw it.
@BùiChíThanh Post your result, otherwise, we cannot diagnose it.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.