Python Opencv绘制轮廓错误

Python Opencv绘制轮廓错误,python,opencv,Python,Opencv,它工作,但我的轮廓的颜色是黑色的。如何将其更改为红色或绿色 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 ,

它工作,但我的轮廓的颜色是黑色的。如何将其更改为红色或绿色

    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()

首先:

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

ret , threshold = cv2.threshold(res,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) 
# ...
cv2.drawContours(threshold,contours,-1,(0,255,0),3)
您在二进制
阈值图像上绘制颜色
(0255,0)
,然后它将始终是第一个元素
0
,即黑色。您应该先将灰色转换为BGR,然后绘制颜色

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

首先

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

ret , threshold = cv2.threshold(res,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) 
# ...
cv2.drawContours(threshold,contours,-1,(0,255,0),3)
您在二进制
阈值图像上绘制颜色
(0255,0)
,然后它将始终是第一个元素
0
,即黑色。您应该先将灰色转换为BGR,然后绘制颜色

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

非常感谢你!它能工作,但画出来后我看不到轮廓。@BùiChíThanh发布你的结果,否则我们无法诊断。非常感谢!它能工作,但画完后我看不到轮廓。@BùiChíThanh发布你的结果,否则我们无法诊断。