python opencv實現(xiàn)圖片缺陷檢測(講解直方圖以及相關(guān)系數(shù)對比法)
一、利用直方圖的方式進行批量的圖片缺陷檢測(方法簡單)
二、步驟(完整代碼見最后)
2.1灰度轉(zhuǎn)換(將原圖和要檢測對比的圖分開灰度化)
灰度化的作用是因為后面的直方圖比較需要以像素256為基準(zhǔn)進行相關(guān)性比較
img = cv2.imread("0.bmp") #原圖灰度轉(zhuǎn)換 gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) #循環(huán)要檢測的圖,均灰度化 for i in range(1, 6): t1=cv2.cvtColor(cv2.imread(str(i)+".bmp"),cv2.COLOR_RGB2GRAY)
2.2 直方圖計算(結(jié)果其實是二維的圖表--用畫圖的方式展示)
calcHist參數(shù)講解
- 第一個參數(shù): 必須為列表[],哪怕只有一個圖片 ,image輸入圖像
- channels::傳入圖像的通道, 如果是灰度圖像,那就不用說了,只有一個通道,值為0 ,如果是彩色圖像(有3個通道),那么值為0,1,2,中選擇一個,對應(yīng)著BGR各個通道。這個值也得用[]傳入。
- mask:掩膜圖像。 如果統(tǒng)計整幅圖,那么為none 。主要是如果要統(tǒng)計部分圖的直方圖,就得構(gòu)造相應(yīng)的炎掩膜來計算。
- histSize:灰度級的個數(shù), 需要中括號,比如[256]
- ranges:像素值的范圍, 通常[0,256] ,有的圖像如果不是0-256,比如說你來回各種變換導(dǎo)致像素值負(fù)值、很大,則需要調(diào)整后才可以。
#直方圖計算的函數(shù),反應(yīng)灰度值的分布情況
hist = cv2.calcHist([gray], [0], None, [256], [0.0,255.0])
h1 = cv2.calcHist([t1], [0], None, [256], [0.0,255.0])
2.3 相關(guān)性比較
cv2.compareHist(H1, H2, method)
其中:
- H1,H2 分別為要比較圖像的直方圖
- method - 比較方式
- 比較方式(method)
- 相關(guān)性比較 (method=cv.HISTCMP_CORREL) 值越大,相關(guān)度越高,最大值為1,最小值為0-----------------------只用一種固然不是很嚴(yán)謹(jǐn),但這里做示范,把閾值調(diào)高也差不多( 取大于等于0.9 )
- 卡方比較(method=cv.HISTCMP_CHISQR 值越小,相關(guān)度越高,最大值無上界,最小值0
- 巴氏距離比較(method=cv.HISTCMP_BHATTACHARYYA) 值越小,相關(guān)度越高,最大值為1,最小值為0
- #相關(guān)性計算,采用相關(guān)系數(shù)的方式
- result = cv2.compareHist(hist,h1,method=cv2.HISTCMP_CORREL)
2.4 展示結(jié)果(判斷閾值)
相關(guān)系數(shù)含義參考表
im = Image.open(str(i) + ".bmp") draw = ImageDraw.Draw(im) fnt = ImageFont.truetype(r'C:\Windows\Fonts\simsun.ttc', 30) #這里視作》=0.9認(rèn)為相似,即合格 if result >=0.9: draw.text((5, 10), u'合格', fill='red', font=fnt) else: draw.text((5, 10), u'不合格', fill='red', font=fnt) im.show("result" +str(i) + ".png")
三、完整代碼
# -*- coding: UTF-8 -*- import cv2 from PIL import Image, ImageDraw, ImageFont img = cv2.imread("0.bmp") #原圖灰度轉(zhuǎn)換 gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) for i in range(1, 6): t1=cv2.cvtColor(cv2.imread(str(i)+".bmp"),cv2.COLOR_RGB2GRAY) #直方圖計算的函數(shù),反應(yīng)灰度值的分布情況 hist = cv2.calcHist([gray], [0], None, [256], [0.0,255.0]) h1 = cv2.calcHist([t1], [0], None, [256], [0.0,255.0]) #相關(guān)性計算,采用相關(guān)系數(shù)的方式 result = cv2.compareHist(hist,h1,method=cv2.HISTCMP_CORREL) im = Image.open(str(i) + ".bmp") draw = ImageDraw.Draw(im) fnt = ImageFont.truetype(r'C:\Windows\Fonts\simsun.ttc', 30) #這里視作》=0.9認(rèn)為相似,即合格 if result >=0.9: draw.text((5, 10), u'合格', fill='red', font=fnt) else: draw.text((5, 10), u'不合格', fill='red', font=fnt) im.show("result" +str(i) + ".png")
參考博文:
Python-Opencv中用compareHist函數(shù)進行直方圖比較進行對比圖片:
http://www.dbjr.com.cn/article/184210.htm
OpenCV-Python 直方圖-1:查找、繪制和分析|二十六: http://baijiahao.baidu.com/s?id=1655424859576397139&wfr=spider&for=pc
希望幫助能大家理解直方圖以及比較函數(shù)作用??!!
總結(jié)
到此這篇關(guān)于python opencv實現(xiàn)圖片缺陷檢測(講解直方圖以及相關(guān)系數(shù)對比法)的文章就介紹到這了,更多相關(guān)python opencv 缺陷檢測內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python+appium框架原生代碼實現(xiàn)App自動化測試詳解
這篇文章主要介紹了Python+appium框架原生代碼實現(xiàn)App自動化測試詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03解決torch.autograd.backward中的參數(shù)問題
今天小編就為大家分享一篇解決torch.autograd.backward中的參數(shù)問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01Python實戰(zhàn)之用tkinter庫做一個鼠標(biāo)模擬點擊器
這篇文章主要介紹了Python實戰(zhàn)之用tkinter庫做一個鼠標(biāo)模擬點擊器,文中有非常詳細的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04