本篇內(nèi)容介紹了“如何使用OpenCV實現(xiàn)圖像增強”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)是專業(yè)的岳塘網(wǎng)站建設(shè)公司,岳塘接單;提供成都做網(wǎng)站、成都網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行岳塘網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
本期將介紹如何通過圖像處理從低分辨率/模糊/低對比度的圖像中提取有用信息。
下面讓我們一起來探究這個過程:
首先我們獲取了一個LPG氣瓶圖像,該圖像取自在傳送帶上運行的倉庫。我們的目標是找出LPG氣瓶的批號,以便更新已檢測的LPG氣瓶數(shù)量。
步驟1:導(dǎo)入必要的庫
import cv2import numpy as npimport matplotlib.pyplot as plt
步驟2:加載圖像并顯示示例圖像。
img= cv2.imread('cylinder1.png')img1=cv2.imread('cylinder.png')images=np.concatenate(img(img,img1),axis=1)cv2.imshow("Images",images)cv2.waitKey(0)cv2.destroyAllWindows()
LPG氣瓶圖片(a)批次-D26(b)批次C27
該圖像的對比度非常差。我們幾乎看不到批號。這是在燈光條件不足的倉庫中的常見問題。接下來我們將討論對比度受限的自適應(yīng)直方圖均衡化,并嘗試對數(shù)據(jù)集使用不同的算法進行實驗。
步驟3:將圖像轉(zhuǎn)換為灰度圖像
gray_img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)gray_img1=cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
步驟4:找到灰度圖像的直方圖后,尋找強度的分布。
hist=cv2.calcHist(gray_img,[0],None,[256],[0,256])hist1=cv2.calcHist(gray_img1,[0],None,[256],[0,256])plt.subplot(121)plt.title("Image1")plt.xlabel('bins')plt.ylabel("No of pixels")plt.plot(hist)plt.subplot(122)plt.title("Image2")plt.xlabel('bins')plt.ylabel("No of pixels")plt.plot(hist1)plt.show()
步驟5:現(xiàn)在,使用cv2.equalizeHist()函數(shù)來均衡給定灰度圖像的對比度。cv2.equalizeHist()函數(shù)可標準化亮度并增加對比度。
gray_img_eqhist=cv2.equalizeHist(gray_img)gray_img1_eqhist=cv2.equalizeHist(gray_img1)hist=cv2.calcHist(gray_img_eqhist,[0],None,[256],[0,256])hist1=cv2.calcHist(gray_img1_eqhist,[0],None,[256],[0,256])plt.subplot(121)plt.plot(hist)plt.subplot(122)plt.plot(hist1)plt.show()
步驟6:顯示灰度直方圖均衡圖像
eqhist_images=np.concatenate((gray_img_eqhist,gray_img1_eqhist),axis=1)cv2.imshow("Images",eqhist_images)cv2.waitKey(0)cv2.destroyAllWindows()
灰度直方圖均衡
讓我們進一步深入了解CLAHE
步驟7:
對比度有限的自適應(yīng)直方圖均衡
該算法可以用于改善圖像的對比度。該算法通過創(chuàng)建圖像的多個直方圖來工作,并使用所有這些直方圖重新分配圖像的亮度。CLAHE可以應(yīng)用于灰度圖像和彩色圖像。有2個參數(shù)需要調(diào)整。
1. 限幅設(shè)置了對比度限制的閾值。默認值為40
2. tileGridsize設(shè)置行和列中標題的數(shù)量。在應(yīng)用CLAHE時,為了執(zhí)行計算,圖像被分為稱為圖塊(8 * 8)的小塊。
clahe=cv2.createCLAHE(clipLimit=40)gray_img_clahe=clahe.apply(gray_img_eqhist)gray_img1_clahe=clahe.apply(gray_img1_eqhist)images=np.concatenate((gray_img_clahe,gray_img1_clahe),axis=1)cv2.imshow("Images",images)cv2.waitKey(0)cv2.destroyAllWindows()
步驟8:
門檻技術(shù)
閾值處理是一種將圖像劃分為前景和背景的簡單但有效的方法。如果像素強度小于某個預(yù)定義常數(shù)(閾值),則最簡單的閾值化方法將源圖像中的每個像素替換為黑色像素;如果像素強度大于閾值,則使用白色像素替換源像素。閾值的不同類型是:
cv2.THRESH_BINARY
cv2.THRESH_BINARY_INV
cv2.THRESH_TRUNC
cv2.THRESH_TOZERO
cv2.THRESH_TOZERO_INV
cv2.THRESH_OTSU
cv2.THRESH_TRIANGLE
嘗試更改閾值和max_val以獲得不同的結(jié)果。
th=80
max_val=255
ret, o1 = cv2.threshold(gray_img_clahe, th, max_val, cv2.THRESH_BINARY)
cv2.putText(o1,"Thresh_Binary",(40,100),cv2.FONT_HERSHEY_SIMPLEX,2,(255,255,255),3,cv2.LINE_AA)
ret, o2 = cv2.threshold(gray_img_clahe, th, max_val, cv2.THRESH_BINARY_INV)
cv2.putText(o2,"Thresh_Binary_inv",(40,100),cv2.FONT_HERSHEY_SIMPLEX,2,(255,255,255),3,cv2.LINE_AA)
ret, o3 = cv2.threshold(gray_img_clahe, th, max_val, cv2.THRESH_TOZERO)
cv2.putText(o3,"Thresh_Tozero",(40,100),cv2.FONT_HERSHEY_SIMPLEX,2,(255,255,255),3,cv2.LINE_AA)
ret, o4 = cv2.threshold(gray_img_clahe, th, max_val, cv2.THRESH_TOZERO_INV)
cv2.putText(o4,"Thresh_Tozero_inv",(40,100),cv2.FONT_HERSHEY_SIMPLEX,2,(255,255,255),3,cv2.LINE_AA)
ret, o5 = cv2.threshold(gray_img_clahe, th, max_val, cv2.THRESH_TRUNC)
cv2.putText(o5,"Thresh_trunc",(40,100),cv2.FONT_HERSHEY_SIMPLEX,2,(255,255,255),3,cv2.LINE_AA)
ret ,o6= cv2.threshold(gray_img_clahe, th, max_val, cv2.THRESH_OTSU)
cv2.putText(o6,"Thresh_OSTU",(40,100),cv2.FONT_HERSHEY_SIMPLEX,2,(255,255,255),3,cv2.LINE_AA)
final=np.concatenate((o1,o2,o3),axis=1)
final1=np.concatenate((o4,o5,o6),axis=1)
cv2.imwrite("Image1.jpg",final)
cv2.imwrite("Image2.jpg",final1)
Thresh_Binary_inv,Thresh_Binary_inv,Thresh_Tozero
Thresh_Tozero_inv,Thresh_trunc,Thresh_OSTU
步驟9:自適應(yīng)閾值
在上一節(jié)中,我們使用了全局閾值來應(yīng)用cv2.threshold()。如我們所見,由于圖像不同區(qū)域的照明條件不同,因此獲得的結(jié)果不是很好。在這些情況下,您可以嘗試自適應(yīng)閾值化。在OpenCV中,自適應(yīng)閾值處理由cv2.adapativeThreshold()函數(shù)執(zhí)行
此功能將自適應(yīng)閾值應(yīng)用于src陣列(8位單通道圖像)。maxValue參數(shù)設(shè)置dst圖像中滿足條件的像素的值。adaptiveMethod參數(shù)設(shè)置要使用的自適應(yīng)閾值算法。
cv2.ADAPTIVE_THRESH_MEAN_C:將T(x,y)閾值計算為(x,y)的blockSize x blockSize鄰域的平均值減去C參數(shù)。
cv2.ADAPTIVE_THRESH_GAUSSIAN_C:將T(x,y)閾值計算為(x,y)的blockSize x blockSize鄰域的加權(quán)總和減去C參數(shù)。
blockSize參數(shù)設(shè)置用于計算像素閾值的鄰域的大小,它可以取值3、5、7等。
C參數(shù)只是從均值或加權(quán)均值中減去的常數(shù)(取決于adaptiveMethod參數(shù)設(shè)置的自適應(yīng)方法)。通常,此值為正,但可以為零或負。
gray_image = cv2.imread('cylinder1.png',0)
gray_image1 = cv2.imread('cylinder.png',0)
thresh2 = cv2.adaptiveThreshold(gray_image, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
thresh3 = cv2.adaptiveThreshold(gray_image, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 31, 3)
thresh4 = cv2.adaptiveThreshold(gray_image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 13, 5)
thresh5 = cv2.adaptiveThreshold(gray_image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 4)
thresh21 = cv2.adaptiveThreshold(gray_image1, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
thresh31 = cv2.adaptiveThreshold(gray_image1, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 31, 5)
thresh41 = cv2.adaptiveThreshold(gray_image1, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 21,5 )
thresh51 = cv2.adaptiveThreshold(gray_image1, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 5)
final=np.concatenate((thresh2,thresh3,thresh4,thresh5),axis=1)
final1=np.concatenate((thresh21,thresh31,thresh41,thresh51),axis=1)
cv2.imwrite('rect.jpg',final)
cv2.imwrite('rect1.jpg',final1)
自適應(yīng)閾值
自適應(yīng)閾值
步驟10:OTSU二值化
gray_image = cv2.imread('cylinder1.png',0)
gray_image1 = cv2.imread('cylinder.png',0)
ret,thresh2 = cv2.threshold(gray_image,0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
ret,thresh3 = cv2.threshold(gray_image1,0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
cv2.imwrite('rect.jpeg',np.concatenate((thresh2,thresh3),axis=1))
OTSU二值化
現(xiàn)在,我們已經(jīng)從低對比度的圖像中清楚地識別出批號。
“如何使用OpenCV實現(xiàn)圖像增強”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
文章題目:如何使用OpenCV實現(xiàn)圖像增強
轉(zhuǎn)載來于:http://muchs.cn/article40/pjjgeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、企業(yè)建站、網(wǎng)站策劃、網(wǎng)站設(shè)計、App設(shè)計、手機網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)