可以直接跳到最后整体代码看一看是不是很少的代码!!!!
思路:
1. 数据的整合
2. 图片的灰度转化
3. 图片的二值转化
4. 图片的轮廓识别
5. 得到图片的顶点数
6. 依据顶点数判断图像形状
一、原数据的展示
三、图片轮廓的确定
3.1图片的灰度处理
以下以一张图片为例子作为说明
对于灰度的处理,选择使用opencv的cv2.cvtColor函数,代码示例如下:
d=os.listdir('C:\\Users\\dell\\Desktop\\cleardata\\')#文件路径 e=cv2.imread('C:\\Users\\dell\\Desktop\\cleardata\\'+d[5])#以矩阵的形式图片读入 plt.imshow(e)#画出示例图
进行灰度的转化:
g=cv2.cvtColor(e,cv2.COLOR_BGR2GRAY)##灰度转化
3.2图片的二值转化
对于图片的二值转化这里选用cv2.threshold函数,代码示例如下:
r,b=cv2.threshold(g,0,255,cv2.THRESH_OTSU)#二值转化,大于0的像素统一设置为255,小于等于0的统一设置为0
上述代码的第一个参数为灰度图形,第二个参数是阈值,即大于0的像素点转化为255,然后选用的THRESH_OTSU方法,具体说明如下:
通常情况,我们一般不知道设定怎样的阈值thresh才能得到比较好的二值化效果,只能去试。如对于一幅双峰图像(理解为图像直方图中存在两个峰),我们指定的阈值应尽量在两个峰之间的峰谷。这时,就可以用第本文来源gaodaimacom搞#^代%!码网@四个参数THRESH_OTSU,它对一幅双峰图像自动根据其直方图计算出合适的阈值(对于非双峰图,这种方法得到的结果可能不理想)。
对于双峰图,我们需要多传入一个参数cv2.THRESH_OTSU,并且把阈值thresh设为0,算法会找到最优阈值,并作为第一个返回值ret返回。
其中会返回两个值,第二个值就是二值化后的图形矩阵。