相关文章推荐
面冷心慈的马克杯  ·  Vue3 ...·  1 月前    · 
腹黑的篮球  ·  sqlserver ...·  1 月前    · 
小胡子的荔枝  ·  batch file if file ...·  11 月前    · 
import numpy as np from PIL import Image , ImageDraw , ImageFont import matplotlib . pyplot as plt #用于给图片添加中文字符的函数 def cv2ImgAddText ( img , text , left , top , textColor = ( 0 , 255 , 0 ) , textSize = 20 ) : # 判断是否OpenCV图片类型 if ( isinstance ( img , np . ndarray ) ) : img = Image . fromarray ( cv2 . cvtColor ( img , cv2 . COLOR_BGR2RGB ) ) # 创建一个可以在给定图像上绘图的对象 draw = ImageDraw . Draw ( img ) # 字体的格式 fontStyle = ImageFont . truetype ( "font/simsun.ttc" , textSize , encoding = "utf-8" ) # 绘制文本 draw . text ( ( left , top ) , text , textColor , font = fontStyle ) # 转换回OpenCV格式 return cv2 . cvtColor ( np . asarray ( img ) , cv2 . COLOR_RGB2BGR ) # plt绘图显示中文 plt . rcParams [ 'font.family' ] = 'SimHei' img0 = cv2 . imread ( r "C:\Users\pc\Desktop\0.bmp" ) cv2 . imshow ( 'img' , img0 ) # 彩色图转灰度图 img1 = cv2 . cvtColor ( img0 , cv2 . COLOR_BGR2GRAY ) # 缺陷检测 for i in range ( 1 , 6 ) : defect_img0 = cv2 . imread ( r "C:\Users\pc\Desktop\%d.bmp" % i ) # 获取灰度图像 defect_img1 = cv2 . cvtColor ( defect_img0 , cv2 . COLOR_BGR2GRAY ) # 获取原图像的灰度直方图 hist0 = cv2 . calcHist ( [ img1 ] , [ 0 ] , None , [ 256 ] , [ 0.0 , 255.0 ] ) # 获取待检测图像的灰度直方图 hist1 = cv2 . calcHist ( [ defect_img1 ] , [ 0 ] , None , [ 256 ] , [ 0.0 , 255.0 ] ) # 为图像添加标题 plt . title ( "原图与待检测img%d对比" % i ) # 添加图例 plt . plot ( hist0 , label = '原图' ) plt . plot ( hist1 , label = '待检测img%d' % i ) # 相似度比较 rst = cv2 . compareHist ( hist0 , hist1 , method = cv2 . HISTCMP_CORREL ) # res >= 0.95即认为合格 cv2 . imshow ( str ( i ) + ".img" , cv2ImgAddText ( defect_img0 , "合格" if rst >= 0.95 else "不合格" , 20 , 20 , ( 255 , 0 , 0 ) , 25 ) ) # 设置x轴的数值范围 plt . xlim ( [ 0 , 256 ] ) plt . legend ( loc = 'upper left' ) plt . show ( ) cv2 . waitKey ( 0 )

问题及解决方法
1.获取原图的直方图
参考链接
方式:
cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate ]])

  • images :输入的图像
  • channels :选择图像的通道
  • mask :是一个大小和 image 一样的 np 数组,其中把需要处理的部分指定为1,不需要处理的部分指定为0,一般设置为 None ,表示处理整幅图像。
  • histSize :使用多少个 bin (柱子),一般为256
  • ranges :像素值的范围,一般为[0,255]表示0~255

该函数结果返回一个二维数组,该数组反应画面中亮度的分布和比例。

2.比较两个直方图的相似度
参考链接
方式:
cv2.compareHist(H1, H2, method)

  • H1 :第一个直方图数组
  • H2 :第二个直方图数组(与第一个纬度相同)
  • method :所使用的方式

该函数返回一个 [0,1] 的相似度值,值越接近一就表名相似度越高。

3.相似度参数微调
由于 compareHist 函数返回一个 [0,1] 的值,需要自己调整一个阈值来选取哪些合格,经过调整后,发现阈值取 [0.90, 0.95] 能够正确选取与实验的结果,代码中取的是0.95,即待检测图与原图之间的相似度如果小于0.95则不合格。

4.通过plot显示原图与待检测图的关系折线
参考链接
通过 calcHist 函数返回的hist数组值,运用 matplotlib 绘制原图和待检测图之间的关系折线图。对比两个曲线的差异。

题目描述利用opencv或其他工具编写程序实现缺陷检测。实现过程# -*- coding: utf-8 -*-'''作者 : 丁毅开发时间 : 2021/4/21 15:30'''import cv2import numpy as npfrom PIL import Image, ImageDraw, ImageFontimport matplotlib.pyplot as plt#用于给图片添加中文字符的函数def cv2ImgAddText(img, text, left
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达今天来一个 缺陷 检测 的实例,如下是原图,第二个和第三个黑色部件有 缺陷 思路: ①提取OK部件轮廓做model ②遍历部件轮廓,做差分,形态学处理 ③结果判断绘制 上代码(含注释):import cv2 import numpy as np # 获取模板ROI def get_templa...
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
import numpy as np img = cv.imread('star.jpg') img_gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY) ret,thresh = cv.threshold(img_gray, 127,...