在很多时候我们需要对一些形状进行识别,其中包括对形状的区分、对图像的提取、对面积和周长的计算等等,这时我们可以利用opencv进行运用从而实现目的。
案例1主要流程:
基于硬核求解原则,咱们用最现成的方法、最简单的思路对问题进行求解。
老规矩先来波预操作:先给咱们的图来滤个波、二值化然后再进行形态学操作,然后我们就能得到一个清晰的二值图了
得到二值图像后咱们就要把他的轮廓提取出来,这里主要是利用finfContours()函数找出图形轮廓,找出各个轮廓后用drawContours()函数绘出轮廓,注意在这里要加入一个轮廓大小判断是否等于窗口面积,否则会将窗口识别成矩形绘出。
接下来先检测出圆形,这里可以利用一个常见的霍夫圆检测函数来检测圆形,利用获得的圆心和半径可以确定圆的位置和大小,从而绘出。
然后对矩形和三角形进行多边拟合操作,利用approxPolyDP()函数
对图像轮廓点进行多边形拟合,对于拟合的结果我们可以进行一个简单的筛选,以便于筛掉过小的拟合矩形。三角形以及其他多边形的拟合操作都与矩形类似。
根据拟合结果我们就能得到各个图形的顶点和边长,从而我们就能利用line()函数将不同的几何形状用不同的颜色描绘出来。
同时我们也可以通过contourArea()函数和arcLength()函数计算出各个图形的面积与周长。
代码实现
#include<opencv2/opencv.hpp>
#include<iostream>
#include<