ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python opencv图像缺陷比对(轮廓比对)

2020-04-04 18:01:07  阅读:277  来源: 互联网

标签:font 待测 合格 python cv2 opencv 图像 轮廓


机器视觉缺陷检测实验

一、实验目的

(1)利用python编写程序实现对图像的缺陷检测;

(2)通过轮廓对比检测出合格产品与不合格产品;

(3)实现在图像上显示文本提示信息;

二、题目描述

(1)读取标准图像并显示;

(2)利用for循环读取待测的对比图像;

(3)将标准图像与一张待测图像进行中值滤波、图像差分、灰度化处理、轮廓提取、最后提取轮廓总数;

(4)将合格产品的轮廓数进行提炼,采用if语句利用轮廓数判断待测图像是否合格;

(5)在合格图像上显示“合格”字样的提示信息,不合格则在相应图像上显示“不合格”。

三、实现过程及运行效果

实验标准图像如下:

图3.1标准图像

实验步骤:

(1)读取标准图像并利用for循环读取待测的对比图像;

(2)将标准图像与一张待测图像进行中值滤波、图像差分、灰度化处理、轮廓提取、最后提取轮廓总数;

代码实例:

import cv2

import numpy as np

from PIL import Image, ImageDraw, ImageFont

minThres = 6

# 读取图像1

img=cv2.imread('0.bmp')#读取标准图像 

cv2.imshow('YuanTu',img)

cv2.waitKey(0)

cv2.destroyAllWindows()

for i in range(1,6):

imgi=cv2.imread('{}.bmp'.format(i))#依次读取待测图像

#中值滤波

img1 = cv2.medianBlur(img,15)

# 图像差分

diff = cv2.absdiff(img1, imgi)

#灰度图

gray = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY)

# 二值化

_,thres = cv2.threshold(gray,minThres,255,cv2.THRESH_BINARY)

# 查找轮廓

contours,hierarchy = cv2.findContours(thres, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

(3)将合格产品的轮廓数进行提炼,采用if语句利用轮廓数判断待测图像是否合格;

代码实例:

if len(contours)>1000:

print('合格')

else:

Print(‘不合格’)

(4)在合格图像上显示“合格”字样的提示信息,不合格则在相应图像上显示“不合格”。

代码实例:

if len(contours)>1000:

print('合格')

#在图像上显示是否合格

src1 = Image.fromarray(cv2.cvtColor(imgi, cv2.COLOR_BGR2RGB))

font = ImageFont.truetype('simsun.ttc', 30)

# 文字输出位置

position = (5,5)

# 输出内容

str = '合格'

draw = ImageDraw.Draw(src1)

draw.text(position, str, font=font, fill=(255, 0, 0))

src1 = cv2.cvtColor(np.asarray(src1), cv2.COLOR_RGB2BGR)

cv2.imshow("CeShi",src1)

cv2.waitKey(0)

else:

print('不合格')

#在图像上显示是否合格

src2 = Image.fromarray(cv2.cvtColor(imgi, cv2.COLOR_BGR2RGB))

font = ImageFont.truetype('simsun.ttc', 30)

# 文字输出位置

position = (5,5)

# 输出内容

str = '不合格'

draw = ImageDraw.Draw(src2)

draw.text(position, str, font=font, fill=(255, 0, 0))

src2 = cv2.cvtColor(np.asarray(src2), cv2.COLOR_RGB2BGR)

cv2.imshow("CeShi",src2)

cv2.waitKey(0)

 

图3.4.1检测结果图

图3.4.2检测结果图

 

图3.4.3检测结果图

 

四、问题及解决方法

(1)刚开始自己想的是将两张灰度图利用equals()函数进行比对看能否通过,结果不难想象确实太天真,这错误很低级了,数据类型都没分清楚的;

(2)在网上查找资料一直找不到怎么直接对两张图像进行缺陷检测比对,只有一个差分检测;

(3)有找到一个关于差异检测的相关资料可是发现其中一个SIF算法被申请了专利不能使用;

(4)最后通过仔细研读了一个博主的代码,几次运行测试发现了轮廓数可以作为判断依据来实现我的目的,所以大胆采用了这一方法,成功实现了本次实验。

五、实验总结

本次实验让我感觉机器视觉实验越来越上升了难度,同时发现老师的高科技实验软件太厉害了,简单方便,科技的力量。本次实验花费了我足足一天的时间才勉强完成任务,之后应该还有一次更加困难的挑战,没有撤退可言唯有迎难而上。

 

标签:font,待测,合格,python,cv2,opencv,图像,轮廓
来源: https://www.cnblogs.com/Wang1107/p/12632951.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有