首页 > 代码库 > OpenCV——轮廓特征描述
OpenCV——轮廓特征描述
检测出特定轮廓,可进一步对其特征进行描述,从而识别物体。
1. 如下函数,可以将轮廓以多种形式包围起来。
// 轮廓表示为一个矩形 Rect r = boundingRect(Mat(contours[0])); rectangle(result, r, Scalar(255), 2); // 轮廓表示为一个圆 float radius; Point2f center; minEnclosingCircle(Mat(contours[1]), center, radius); circle(result, Point(center), static_cast<int>(radius), Scalar(255), 2); // 轮廓表示为一个多边形 vector<Point> poly; approxPolyDP(Mat(contours[2]), poly, 5, true); vector<Point>::const_iterator itp = poly.begin(); while (itp != (poly.end() - 1)) { line(result, *itp, *(itp + 1), Scalar(255), 2); ++itp; } line(result, *itp, *(poly.begin()), Scalar(255), 2); // 轮廓表示为凸多边形 vector<Point> hull; convexHull(Mat(contours[3]), hull); vector<Point>::const_iterator ith = hull.begin(); while (ith != (hull.end() - 1)) { line(result, *ith, *(ith + 1), Scalar(255), 2); ++ith; } line(result, *ith, *(hull.begin()), Scalar(255), 2);
2. 将轮廓数据存储在记事本中,然后读取数据,存入vector<cv::Point>中
void readFromTxt(string name,int q) { ifstream file(name); int i = 0; while (file) { string line; getline(file, line); if (line == "")break; cv::Point p; int num; for (int i = 0;; i++) { if (line[i] == ‘;‘) { num = i + 1; break; } } int x = 0, y = 0; int k; for (int i = 0; i < num; i++) { if (line[i] == ‘,‘) { k = i; for (int j = 2; j < k; j++) { x += (line[j] - ‘0‘) * (pow(10, k - j - 1)); } } if (line[i] == ‘;‘) { for (int j = k + 2; j < i; j++) { y += (line[j] - ‘0‘) * (pow(10, i - j - 1)); } } } p.x = x; p.y = y; if(q == 0)shitou.push_back(p); else if (q == 1)jiandao.push_back(p); else bu.push_back(p); } }
其中每行的存取格式为:
136, 30; 135, 31; 134, 31;
3. 使用mathShapes函数比较两个形状的相似度
函数返回值 为 相似度大小,完全相同的图像返回值是0,返回值最大是1。
double cvMatchShapes( const void* object1, const void* object2, int method, double parameter=0 ); 参数含义 object1——第一个轮廓或灰度图像 object2——第二个轮廓或灰度图像 method——比较方法: CV_CONTOURS_MATCH_I1 CV_CONTOURS_MATCH_I2 CV_CONTOURS_MATCH_I3. parameter——比较方法的参数
参考:http://mobile.51cto.com/aengine-435442.htm
OpenCV——轮廓特征描述
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。