前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV轮廓按面积大小排序(附Python/C++代码)

OpenCV轮廓按面积大小排序(附Python/C++代码)

作者头像
Color Space
发布2020-05-22 18:46:37
6.7K1
发布2020-05-22 18:46:37
举报

今天分享一个使用OpenCV给轮廓排序的例子,排序是依据轮廓面积的大小,当然你还可以改成其他的,比如宽高,长度等。

先看下原图包含4个不同大小的矩形:

上代码(Python OpenCV):

代码语言:javascript
复制
import cv2
import numpy as np

# putText函数使用的字体定义
font = cv2.FONT_HERSHEY_SIMPLEX
PI = 3.1415926
 
# 读取图片、灰度转换、OTSU阈值
img = cv2.imread("test.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(gray,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
# 查看二值化结果
cv2.imshow("thres", thresh)
cv2.imwrite("thres.jpg", thresh)

# 轮廓查找
_, contours,hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

def cnt_area(cnt):
  area = cv2.contourArea(cnt)
  return area

contours.sort(key = cnt_area, reverse=False)
for i in range(0, len(contours)):
  (x, y, w, h) = cv2.boundingRect(contours[i])
  cv2.rectangle(img,(x,y),(x+w, y+h),(255,0,0),2, cv2.LINE_AA)
  cv2.putText(img,"No.%d"%(i+1),(x,y-5),font,0.8,(255,0,0),2)

cv2.imshow("contours", img)
cv2.imwrite("result1.jpg",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

核心函数如下,对contours list排序:

代码语言:javascript
复制
def cnt_area(cnt):
  area = cv2.contourArea(cnt)
  return area
contours.sort(key = cnt_area, reverse=False)

reverse=False(默认)降序排列,reverse=True升序排列

效果如如下:

C++ OpenCV代码类似,如下:

代码语言:javascript
复制
//比较轮廓面积(USB_Port_Lean用来进行轮廓排序)
bool Contour_Area(vector<Point> contour1, vector<Point> contour2)
{
  return contourArea(contour1) > contourArea(contour2);
}
代码语言:javascript
复制
vector<vector<Point>> contours;
vector<Vec4i> hierarcy;
bool ret = false;
findContours(thres, contours, hierarcy, RETR_EXTERNAL, CHAIN_APPROX_NONE); //查找轮廓
sort(contours.begin(), contours.end(), Contour_Area);
  for (int i = 0; i < contours.size(); i++)
{
  double area = contourArea(contours[i]);
  cout << area << endl;
  }
本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-10,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 OpenCV与AI深度学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com