【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());//寻找边界
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步