Python圖像處理之模糊圖像判斷
上期回顧
上一次的圖像清晰度評價沒有成功,主要的原因是那幾張圖像清晰度評價函數(shù)都實際都采用了梯度求解,不同的場景灰度的明暗不同,梯度可能會很大,無法得到一個界定值來判定圖像的清晰度,所以這次我打算只對動態(tài)模糊的圖像進行判斷,是否是動態(tài)模糊圖像。
采用Laplace算子的原因
根據(jù)我之前的一個調(diào)研,在清晰度評價函數(shù)當(dāng)中,我決定采用Laplace算子,因為它所得到的梯度值較小,容易獲得一個模糊判斷區(qū)間,而其他的幾種所獲得的梯度值較大,相應(yīng)的誤差范圍也將更高,而且在opencv當(dāng)中就集成了Laplace算子,很輕松就能調(diào)用,并得到一個很好的結(jié)果。
實現(xiàn)的效果
本次將會使用一組模糊圖像和一組標(biāo)準(zhǔn)圖像獲得模糊判定區(qū)間(a,b),我們知道梯度值越大,圖像越清晰,所以當(dāng)我們進行測試一張圖像時,它所返回的梯度值小于a,則可以說明它是一個模糊的圖像,當(dāng)返回的梯度值大于b時,則可以說明它是一個清晰的圖像,而當(dāng)返回的梯度值落在了a與b之間,我們也將其放在模糊圖像當(dāng)中。
圖片素材
我自己采用的是手機拍攝的照片,分辨率都是1280*960,請注意圖像的尺寸與場景會影響返回的梯度值,但我們通常采集的數(shù)據(jù)都是由相機拍攝,尺寸相同,工業(yè)上采用道路裂縫檢測的場景基本類似,所以有研究的意義。
代碼的展示與講解
import cv2 import os def getPhotopath(paths): imgfile = [] file_list=os.listdir(paths) for i in file_list: newph=os.path.join(paths,i) imgfile.append(newph) return imgfile def getImgVar(image): imggray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) imageVar = cv2.Laplacian(imggray, cv2.CV_64F).var() return imageVar def getTest(imgfile): c = [] for i in imgfile: # print(i) img=cv2.imread(i) image=getImgVar(img) # print(image) c.append(float(f"{image:.3f}")) if 'test' in imgfile[0]: #對測試集數(shù)據(jù)進行反轉(zhuǎn) c.sort(reverse=True) else: c.sort() return c def getThr(): a=getTest(imgfile1) b=getTest(imgfile2) thr=(a[0],b[0]) # print(thr) return thr path1="./test" #測試的數(shù)據(jù)集文件夾位置 path2="./Standards" #標(biāo)準(zhǔn)圖的數(shù)據(jù)文件夾位置 #獲取文件下的名稱 imgfile1=getPhotopath(path1) imgfile2=getPhotopath(path2) #獲得閾值 minThr,maxThr=getThr() print(minThr,maxThr) def vagueJudge(image): img = cv2.imread(image) imgVar = getImgVar(img) if imgVar>maxThr: cv2.putText(img, f"Not Vague{imgVar:.2f}", (12, 70), cv2.FONT_HERSHEY_PLAIN, 3, (255, 0, 0), 3) else: cv2.putText(img, f"Vague{imgVar:.2f}", (12, 70), cv2.FONT_HERSHEY_PLAIN, 3, (255, 0, 0), 3) cv2.imshow("img",img) k=cv2.waitKey(0) & 0xFF image="./Standards/001.jpg" #需要進行測試的圖片 vagueJudge(image) getPhotopath函數(shù):獲得文件夾下各個圖片路徑,輸入模糊圖片的文件夾,輸入標(biāo)準(zhǔn)圖像的文件夾,存入列表當(dāng)中。 getImgVar函數(shù):返回圖像梯度值。 getTest函數(shù):對每個圖像進行了梯度值計算后,存入列表當(dāng)中,對模糊圖像的進行列表序列翻轉(zhuǎn)。 def getThr函數(shù):獲得模糊判定區(qū)間(a,b)。 vagueJudge函數(shù):對新輸入的圖像進行模糊判定,只要小于b,就判定為模糊。
效果展示
由于我不想在拍攝新的圖片,這里就采用./test文件和./Standards文件的圖片。
控制臺打印的模糊判定區(qū)間:
4.327 65.401
image="./Standards/001.jpg"
image="./test/01.jpg"
項目資源
到此這篇關(guān)于Python圖像處理之模糊圖像判斷的文章就介紹到這了,更多相關(guān)Python模糊圖像判斷內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中關(guān)于range()函數(shù)反向遍歷的幾種表達
這篇文章主要介紹了python中關(guān)于range()函數(shù)反向遍歷的幾種表達,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05python中l(wèi)ist,ndarray,Tensor間的轉(zhuǎn)換小結(jié)
數(shù)據(jù)類型轉(zhuǎn)換是常見的功能,本文主要介紹了python中l(wèi)ist,ndarray,Tensor間的轉(zhuǎn)換小結(jié),文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-02-02一文帶你學(xué)會如何利用Python實現(xiàn)一個三維繪圖系統(tǒng)
tkinter是Python標(biāo)準(zhǔn)庫中自帶的GUI工具,使用十分方便,所以本文旨在帶大家學(xué)會如何將matplotlib嵌入到tkinter中并繪制三維繪圖系統(tǒng),感興趣的可以了解下2023-09-09Python環(huán)境Pillow( PIL )圖像處理工具使用解析
這篇文章主要介紹了Python環(huán)境Pillow( PIL )圖像處理工具使用解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09