【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());//寻找边界