计算机视觉|OpenCV图像轮廓(2)轮廓面积

OpenCV的图像轮廓有一些特征,像面积、弧长(其实就是轮廓的长度)、图像矩等。
先写一下相关术语中英文参照。
轮廓contour
特征feature
面积area
弧长perimeter
图像矩image moment
通过cv2.contourArea可以求得轮廓面积。
通过一个例子来演示一下,例如,想要过滤掉那些微小琐碎的轮廓,只显示lena这幅图中面积大于500的轮廓。代码思路是将findContours查找到的轮廓按照面积排序,然后绘制。

def contour_area(): img = cv2.imread('../images/lena.jpg', cv2.IMREAD_GRAYSCALE) ret, thresh = cv2.threshold(img, 160, 255, cv2.THRESH_BINARY) contours,hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 复制原图 img1 = img.copy() # 创建一幅相同大小的白色图像 img2 = np.ones(img.shape) # 按照面积将所有轮廓逆序排序 contours2 = sorted(contours, key=lambda a: cv2.contourArea(a), reverse=True) for c in contours2: area = cv2.contourArea(c) print(area) # 只输出面积大于500轮廓 if area<500:break # 分别在复制的图像上和白色图像上绘制当前轮廓 cv2.drawContours(img1, [c],0, (0,255,0), 3) cv2.drawContours(img2, [c],0, (0,255,0), 3) plot_images(1,3,[img,img1,img2], gray=True)

【计算机视觉|OpenCV图像轮廓(2)轮廓面积】运行界面如下图
计算机视觉|OpenCV图像轮廓(2)轮廓面积
文章图片

共有3幅图,分别是原始图像,在原始图像上绘制了轮廓,在白色背景图上绘制了轮廓。
程序的print输出内容如下
22757.5 10316.5 7935.0 6270.0 1317.5 1250.0 1132.0 769.0 699.5 371.5

    推荐阅读