阅读对象:无要求。
1.代码
''' OpenCV中的轮廓 轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。为了更加准确,要使用二值化图像。在寻找轮廓之前,要进行阈值化处理或者 Canny 边界检测。 cv2.findContours()在一个二值图像中查找轮廓 有三个参数: 第一个:输入图像; 第二个:轮廓检索模式; 第三个:轮廓近似方法 cv2.CHAIN_APPROX_NONE:所有的边界点都会被存储。但是我们真的需要这么多点吗?例如,当我们找的边界是一条直线时。你用需要直线上所有的点来表示直线吗?不是的,我们只需要这条直线的两个端点而已。 cv2.CHAIN_APPROX_SIMPLE :会将轮廓上的冗余点都去掉,压缩轮廓,从而节省内存开支。 返回值有三个: 第一个:图像, 第二个:轮廓,轮廓是一个 Python列表,其中存储这图像中的所有轮廓,每一个轮廓都是一个 Numpy 数组,包含对象边界点(x,y)的坐标。 第三个:(轮廓的)层析结构。 #######教程说有三个返回值,但是我用的opencv2.4版本只有两个返回值:轮廓和层次结构,切记######## cv2.drawContours() 可以被用来绘制轮廓。它可以根据你提供的边界点绘制任何形状。 第一个参数:原始图像, 第二个参数:轮廓,一个 Python 列表。 第三个参数:轮廓的索引(在绘制独立轮廓时很有用,当设置为-1时绘制所有轮廓) 接下来的参数:轮廓的颜色和厚度等。 ''' import numpy as np import cv2 dir='C:/Users/Thinkpad/Desktop/picture/' im = cv2.imread(dir + 'q.jpg') 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,0,255),3) cv2.imshow("im", im) cv2.waitKey(0)
2.cv2.imshow("im", im) 的结果
图1 结果
参考资料:http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_contours/py_contours_begin/py_contours_begin.html
end!!