python识别组件轮廓并获得最大轮廓
作者:互联网
在光伏行业胶膜公司工作时,工作中的数据整理的工作单调无趣,作为一个崇尚自动化办公的制造业懒人,怎能忍受?!
本文中讲到的光伏组件EL测试结果截图就是其中一项,具体内容就是把图中发光的部分截图并保存,单个图片很简单,但数量多起来也是要消耗不少时间,必须想个办法解决一下,每天哪怕省出个把小时抠抠手机摸摸鱼也是好的~~~
碰巧会点python,在逛我大CSDN论坛中发现能实现轮廓识别,再自己改点也就完成了,上报公司还有点奖金,爽歪歪~~~
下面稍微介绍下核心函数:
1、由于EL仪器的关系,测试结果会是一个大的发光区域与很多模糊的光点,通过CV2的识别轮廓的方法,会获得一个列表对应一系列的发光轮廓,而测试结果必定是发光轮廓最大的那个,后面的思路也是基于此。
import cv2
ret, thresh = cv2.threshold(gray.copy(), f, 255, cv2.THRESH_BINARY)
contours,hierarchy= cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
2、遍历上面获得的发光轮廓列表contours,获得每个发光区域大小newimage.size,并形成一一对应列表piclist,用于后续识别。
#piclist轮廓列表
piclist=[]
for i in range(0,len(contours)):
x, y, w, h = cv2.boundingRect(contours[i])
newimage=gray[y+2:y+h-2,x+2:x+w-2] # 先用y确定高,再用x确定宽
#轮廓切片原图并获取图片size,加入列表,用于排除不合理的轮廓
piclist.append(newimage.size)
3、识别piclist最大的项并获得对应的index,然后从contours中提取区域并截图保存,由于EL测试中会存在电池片短路,即没有发光区域,所以会有if newimage.size!=0这个判断。
以下是核心函数的全部代码。
def singleCut(inpath,fileName,outpath):
#开始截图计时
start = time.process_time()
#读取图片
img = cv_imread(inpath)
#转换为灰度图
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#设置阈值 有待商榷
f=(2*max(gray[2])+3*min(gray[2]))/4#获取组件轮廓
ret, thresh = cv2.threshold(gray.copy(), f, 255, cv2.THRESH_BINARY)
contours,hierarchy= cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
#piclist轮廓列表
piclist=[]
for i in range(0,len(contours)):
x, y, w, h = cv2.boundingRect(contours[i])
newimage=gray[y+2:y+h-2,x+2:x+w-2] # 先用y确定高,再用x确定宽
#轮廓切片原图并获取图片size,加入列表,用于排除不合理的轮廓
piclist.append(newimage.size)
#关键步骤:获取轮廓列表中图片尺寸最大的切片 即EL中的组件发光区域
flag=True
m=0 #test
for i in range(0,len(contours)):
m=m+1
if i==piclist.index(max(piclist)):
x, y, w, h = cv2.boundingRect(contours[i])
#切片并保存结果
newimage=img[y+2:y+h-2,x+2:x+w-2] # 先用y确定高,再用x确定宽
if newimage.size!=0:
cv_imwrite( outpath+fileName+".jpg",newimage)
#cv_imwrite( outpath+"\{}-{}-{}".format(m,max(gray[3]),min(gray[3]))+".jpg",newimage)
else:
flag=False
#结束计时
end = time.process_time()
print("截图耗时{}秒".format("%.2f"%(end-start)))
return flag
我也是在搜索好多CSDN论坛大神的文章后完成的,所以希望能帮到后来人,毕竟我大Python开发环境这么友善~~~~
标签:gray,python,cv2,contours,piclist,组件,newimage,轮廓 来源: https://blog.csdn.net/weixin_42604699/article/details/121705869