我运行此代码:
import cv2
import numpy as np
from matplotlib import pyplot as plt
im=cv2.imread('1.jpg')
#mask=np.zeros(img.shape[:2],np.uint8)
imgray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh=cv2.threshold(imgray,200,200,200)
countours,hierarchy=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(im,countours,-1,(0,255,0),3)
cv2.imshow("begueradj",im)
cv2.waitKey(0)
cv2.destroyAllWindows()
在这两张照片上(我显示原始照片和结果照片):
图片1:
图2:
结果1:
结果2:
我的问题:
在结果1 中,threshold()
达到了我的预期。
但为什么在结果2 中有绿色方块?根据我对threshold()
函数的理解,只能显示绿色圆圈。为什么是这样 ?我不理解这个功能是什么?
答案 0 :(得分:3)
OpenCV将所有白色像素视为前景,将黑色像素视为背景。绿色轮廓可视化检测到的前景。
如果要突出显示黑色圆圈,则需要事先反转图像。或者,您可以使用阈值类型“THRESH_BINARY_INV”(http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html?highlight=threshold#threshold)。