可以直接跳到最后整体代码看一看是不是很少的代码!!!!
思路:
1. 数据的整合
2. 图片的灰度转化
3. 图片的二值转化
4. 图片的轮廓识别
5. 得到图片的顶点数
6. 依据顶点数判断图像形状
一、原数据的展示
图片文件共36个文件夹,每个文件夹有100张图片,共3600张图片。
每一个文件夹里都有形同此类的图形
二、数据的整合
对于多个文件夹,分析起来很不方便,所有决定将其都放在一个文件夹下进行分析,在python中具体实现如下:
本次需要的包
import cv2 import os from PIL import Image import matplotlib.pyplot as plt import numpy as np
a=os.listdir('C:\\Users\\dell\\Desktop\\OpenCVProofSet')#循环读取每个子文件夹 for i in range(len(a)): b=os.listdir('C:\\Users\\dell\\Desktop\\OpenCVProofSet\\'+a[i])#读取每个子文件下的图片文件 for j in range(len(b)): c=Image.open('C:\\Users\\dell\\Desktop\\OpenCVProofSet\\'+a[i]+'\\'+b[j])#循环读取每个图片文件 c.save('C:\\Users\\dell\\Desktop\\cleardata\\'+str(i)+'_'+str(j)+'.png')#以文件夹序号和图片序号为名保存在一个兴建文件夹下
结果如下:
三、图片轮廓的确定
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才能得到比较好的二值化效果,只能去试。如对于一幅双峰图像(理解为图像直方图中存在两个峰),我们指定的阈值应尽量在两个峰之间的峰谷。这时,就可以用第四个参数THRESH_OTSU,它对一幅双峰图像自动根据其直方图计算出合适的阈值(对于非双峰图,这种方法得到的结果可能不理想)。
对于双峰图,我们需要多传入一个参数cv2.THRESH_OTSU,并且把阈值thresh设为0,算法会找到最优阈值,并作为第一个返回值ret返回。
其中会返回两个值,第二个值就是二值化后的图形矩阵。
3.3轮廓的寻找
在轮廓的寻找方面,采用cv2.findContours方式。代码示例如下:
cr,t=cv2.findContours(b, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)##找到边界,第一个参数是二值图像,第二个参数是获取轮廓的方式, #第三个参数定义轮廓的近似方式
上述函数里的参数中,第一个参数是二值化后的矩阵,第二个参数是获取轮廓的方式,第三个参数是定义轮廓的近似方式。后面两个参数的具体解释如下:
上面得到的结果中第一个结果是轮廓点的集合。
画出边界轮廓,运用函数是cv2.drawContours,代码示例如下:
plt.imshow(cv2.drawContours(e,cr,-1,50))#画出边界,可以看出有坐标轴和五角星两个边界,第一个参数是原图,第二个参数是边界, #第三个参数代表画出所有边界,第四个参数是线的粗细
上述函数中第一个参数是原始图形,第二个参数是得到的轮廓点的集合,第三个参数是代表画出所有轮廓点,第四个参数是线的粗细。
得到结果如下:
可以发现,坐标轴的轮廓和五角星的轮廓都被画了出来。
3.4轮廓的逼近,得到顶点
在得到轮廓点后,需要得到轮廓的顶点,通过顶点得到具体什么图形,在轮廓逼近中用到两个函数:cv2.arcLength,cv2.approxPolyDP,代码示例如下:
ep = 0.01*cv2.arcLength(cr[1], True)#五角星轮廓的周长cr[0]是坐标轴的周长,然后将其缩小,作为下一步的阈值 ap = cv2.approxPolyDP(cr[1], ep, True)#轮廓的转折点的近似点
cv2.arcLength得到的是轮廓点形成的曲线围成的图形的周长,cr[1]代表里层五角星的轮廓点,因为cr里有两个轮廓集合,一个是外层的坐标轴的轮廓点集合,一个是里层五角星的轮廓点集合。True代表闭合的曲线。将其取1%作为下一个函数的阈值。
cv2.approxPolyDP将其得到的轮廓点进行筛选(按设定的阈值与其真实的线进行比较),其筛选的标准就是上一个函数得到的1%的周长,大于这个值的点舍去,小于这个值的点保留,True依然代表闭合曲线。
通过以上的步骤就可以保留一些点,而这些点就是得到顶点(这点需要读者去想一想,为什么以1%周长为阈值得到的点就是顶点,作者认为是两条线的拐点相对于来说是里真实线最近的点)
顶点数:
len(ap)#可以看见五角星有10个点
四、依据顶点判断形状
根据得到的定点数就可判断出形状了,三个顶点就是三角形,四个就是矩形,十个就是五角星,十个以上就是圆形了;上述的完整代码如下:
import cv2 import os from PIL import Image import matplotlib.pyplot as plt import numpy as np d=os.listdir('C:\\Users\\dell\\Desktop\\cleardata\\') for i in range(len(d)): e=cv2.imread('C:\\Users\\dell\\Desktop\\cleardata\\'+d[i]) g=cv2.cvtColor(e,cv2.COLOR_BGR2GRAY) r,b=cv2.threshold(g,0,255,cv2.THRESH_OTSU) cr,t=cv2.findContours(b, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) ep = 0.01*cv2.arcLength(cr[1], True) ap = cv2.approxPolyDP(cr[1], ep, True) co=len(ap) if co==3: st='三角形' elif co==4: st='矩形' elif co==10: st='五角星' else: st='圆' plt.imsave('C:\\Users\\dell\\Desktop\\形状\\'+st+str(e[100][100])+str(i)+'.jpg',e)#取图像中间的点的RGB作为颜色代表
这里我还取了图形的中点,希望得到图片的颜色,其得到的是RGB值,通过RGB值就可以得到颜色。
最终结果如下:
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]