- 两个月前刚学Opencv的泄作(代码在文章下边)
- 效果比力好的就是确定手机的屏幕
- 查找缺陷方面效果不是很抱负
- 有空会思量举行优化一下
这是界面图,字体计划的不是很好,这期紧张讲Opencv方面的,后边会补一个关于PyQt5的代码详解
效果图
没有缺陷的时间会表现硬核拼音提示
可以看到上边缺陷探求的不是很抱负,但是这个检测手机出来的效果非常好
大概思绪:
获取目标远景由于另有一些花岗岩配景以是要对图像举行一系列操纵,然后裁剪图片举行缺陷辨认,这里也可以使用矩阵的间隔变更实现,我用的是裁剪图片
- <code>image = cv2.blur(image,(3,3))
- image = cv2.blur(image,(3,3))
- image = cv2.blur(image,(3,3))
复制代码
先对图像举行三次滤波操纵,假如二值化后在举行滤波操纵大概会丧失手机的白色边框
滤波后的图像
- <code>image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 灰度图
- t1, image = cv2.threshold(image,170,255,cv2.THRESH_TOZERO)
复制代码
二值化图像,剩下来的就很简朴了
- <code>listArea = [0]*100
- for i in range(0, len(contours)): # 遍历所有的统计的轮廓的次数
- x, y, w, h = cv2.boundingRect(contours[i])
- # 取最大矩形面积 #
- # 筛选 #
- Area = w * h
- listArea[i] = Area
- a = max(listArea)
- for i in range(0, len(contours)): # 遍历所有的统计的轮廓的次数
- x, y, w, h = cv2.boundingRect(contours[i])
- Area = w * h
- if Area < a and Area > 400 :
- cv2.rectangle(image3, (x, y), (x + w, y + h), (0, 0, 255), 2) # 画矩形
- image10 = image3[y:y + h, x:x + w] # 剪切屏幕出来
- cv2.imshow("10", image10)
- if Area == a:
- cv2.rectangle(image3, (x, y), (x + w, y + h), (0, 255, 0), 2) # 画矩形
- cv2.putText(image3, "Phone", (x, y), cv2.FONT_HERSHEY_DUPLEX, 2, (0, 255, 0), 1) # 放文字
复制代码
裁剪屏幕,由于当时是没有Python根本的,以是一些界说看起来怪怪的(这个忽略就好)
- 代码总体意思
- 检测物体外貌,然后通过cv2.boundingRect取外貌的最大外接矩形
- Area = w * h求出Area的外貌的面积,像素差别的面积也肯定差别但是幸亏噪声的面积不会很大,这也就能通过筛选面积求脱手机的坐标信息了,
- 第一个for起首求出全部外貌的正方形面积,然后在第二个for里边通过给出的全部面积来举行筛选
- 这里对许多图像举行了一个测试一样平常一些噪声的面积都会在100左右,纵然图像分辨率很高面积也不会大于300以是只要面积大于400的我们认定他就是手机
- 至于为什么这里有一个Max值a呢这是由于有些手机有外边的边框和里边的包裹的屏幕形成的以是我们会得到两个大于400的值,最大谁人自然就是边框了,比400大比最大值小的自然就是手机的屏幕,假如你想整部手机检测进去的话就在倒数第二个if语句改成Area == a即可
剩下的就是我们手机缺陷的查找(摆----烂)
可以看到效果不是很好(界面那边给出了宁外两个,我这里就讲这个了)
- <code>image = cv2.add(image, image)
- image = cv2.add(image, image)
- # 转灰 #
- image = cv2.cvtColor(image, cv2.COLOR_RGBA2GRAY)
- # 二值化 #
- t1, image = cv2.threshold(image, 250, 255, cv2.THRESH_BINARY)
- image123 = image.copy()
- # 腐蚀 #
- image123 = cv2.dilate(image123, (12, 12))
- imageCAA = cv2.add(image123, image123)
- imageCAA = cv2.dilate(imageCAA, (12, 12))
- imageCAA = cv2.dilate(imageCAA, (12, 12))
- imageCAA = cv2.dilate(imageCAA, (12, 12))
- imageCAA = cv2.dilate(imageCAA, (12, 12))
复制代码
图像的处理处罚,本来是筹划不绝的加强线的对比度然后联通划痕在举行辨认的,但是太难搞了就放弃了
处理处罚好的图像
- <code>imageCAA = cv2.medianBlur(imageCAA, 15)
复制代码
中值滤波后
后边老套路了,找外貌,凸包完事了
代码老样子塞手刺群里头了,紧张是Github不会使,caogenba又塞不了压缩包
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |