【OpenCV】图像几何形状识别(C++)

前言

        又是好久没写。。。开了OpenCV这个板块总要写点东西,正好昨晚花了一晚上整出来一个几何形状识别,用了个简单的方法,整体上不难

理论

        对于物体几何形状的识别,我们需要的就是它的特征,而常见的几何形状特征主要在于构成这一形状的边的条数,那么对于几何形状的识别,就可以分为以下两步:首先滤除无关信息,接着获取判别特征。

        滤除无关信息我们采用的是简单的二值化处理,对于初始图像,利用到如下两个函数:

        灰度:cvtColor(img, imgGray, COLOR_BGR2GRAY)

        二值化:threshold(imgGray, imgBinary, 197, 255, THRESH_BINARY)

        197为灰度二值化阈值,对于较为复杂的情况可以采用Sobel或者Canny

         获取判别特征,首先利用findContours找出边界,利用drawContours画出边界所在,再利用多边形逼近approxPolyDP拟合出形状最可能的边数

    vector<vector<Point>> contours;

    vector<Point> point;

    vector<Vec4i> hireachy;

    findContours(imgBinary, contours, hireachy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point());//寻找边界

 

posted @ 2021-05-01 00:18  骤雨重山  阅读(1316)  评论(0编辑  收藏  举报