這篇文章給大家分享的是有關Python中利用opencv實現缺陷檢測的方法的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
python的數據類型:1. 數字類型,包括int(整型)、long(長整型)和float(浮點型)。2.字符串,分別是str類型和unicode類型。3.布爾型,Python布爾類型也是用于邏輯運算,有兩個值:True(真)和False(假)。4.列表,列表是Python中使用最頻繁的數據類型,集合中可以放任何數據類型。5. 元組,元組用”()”標識,內部元素用逗號隔開。6. 字典,字典是一種鍵值對的集合。7. 集合,集合是一個無序的、不重復的數據組合。
利用opencv或其他工具編寫程序實現缺陷檢測。
# -*- coding: utf-8 -*-
'''
作者 : 丁毅
開發時間 : 2021/4/21 15:30
'''
import cv2
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(柱子),一般為256ranges:像素值的范圍,一般為[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繪制原圖和待檢測圖之間的關系折線圖。對比兩個曲線的差異。
感謝各位的閱讀!關于“Python中利用opencv實現缺陷檢測的方法”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。