主頁 > 知識庫 > Python opencv缺陷檢測的實現(xiàn)及問題解決

Python opencv缺陷檢測的實現(xiàn)及問題解決

熱門標簽:地圖制圖標注位置改變是移位嗎 地圖標注的意義點 315電話機器人廣告 上海機器人外呼系統(tǒng)哪家好 房產(chǎn)電銷外呼系統(tǒng) 蓋州市地圖標注 浙江電銷卡外呼系統(tǒng)好用嗎 南京銷售外呼系統(tǒng)軟件 地圖標注微信發(fā)送位置不顯示

題目描述

利用opencv或其他工具編寫程序實現(xiàn)缺陷檢測。

實現(xiàn)過程

# -*- coding: utf-8 -*-
'''
作者 : 丁毅
開發(fā)時間 : 2021/4/21 15:30
'''
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont
import matplotlib.pyplot as plt


#用于給圖片添加中文字符的函數(shù)
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))
    # 創(chuàng)建一個可以在給定圖像上繪圖的對象
    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軸的數(shù)值范圍
    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數(shù)組,其中把需要處理的部分指定為1,不需要處理的部分指定為0,一般設置為None,表示處理整幅圖像。histSize:使用多少個bin(柱子),一般為256ranges:像素值的范圍,一般為[0,255]表示0~255

該函數(shù)結果返回一個二維數(shù)組,該數(shù)組反應畫面中亮度的分布和比例。

2.比較兩個直方圖的相似度
參考鏈接
方式:
cv2.compareHist(H1, H2, method)

H1:第一個直方圖數(shù)組H2:第二個直方圖數(shù)組(與第一個緯度相同)method:所使用的方式

該函數(shù)返回一個[0,1]的相似度值,值越接近一就表名相似度越高。

3.相似度參數(shù)微調
由于compareHist函數(shù)返回一個[0,1]的值,需要自己調整一個閾值來選取哪些合格,經(jīng)過調整后,發(fā)現(xiàn)閾值取[0.90, 0.95]能夠正確選取與實驗的結果,代碼中取的是0.95,即待檢測圖與原圖之間的相似度如果小于0.95則不合格。

4.通過plot顯示原圖與待檢測圖的關系折線
參考鏈接
通過calcHist函數(shù)返回的hist數(shù)組值,運用matplotlib繪制原圖和待檢測圖之間的關系折線圖。對比兩個曲線的差異。

到此這篇關于Python opencv缺陷檢測的實現(xiàn)的文章就介紹到這了,更多相關opencv缺陷檢測內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python opencv實現(xiàn)圖片缺陷檢測(講解直方圖以及相關系數(shù)對比法)
  • Python-OpenCV實現(xiàn)圖像缺陷檢測的實例

標簽:雙鴨山 克拉瑪依 貴州 赤峰 日照 金華 陽泉 臨汾

巨人網(wǎng)絡通訊聲明:本文標題《Python opencv缺陷檢測的實現(xiàn)及問題解決》,本文關鍵詞  Python,opencv,缺陷,檢測,的,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python opencv缺陷檢測的實現(xiàn)及問題解決》相關的同類信息!
  • 本頁收集關于Python opencv缺陷檢測的實現(xiàn)及問題解決的相關信息資訊供網(wǎng)民參考!
  • 推薦文章