python腳本之如何按照清晰度對圖片進(jìn)行分類
原理
在《Analysis of focus measure operators for shape-from-focus》[2013 Pertuz et al.]。
在這篇文獻(xiàn)中,Pertuz 等人論述了近 36 種不同的圖片清晰度評價(jià)(focus measure)方法。
其中一種方式比較簡單,就是使用拉普拉斯方差算法,直接得到一個(gè)浮點(diǎn)數(shù)方差表征清晰度。
事先設(shè)定一個(gè)閾值,如果某圖片的清晰度低于預(yù)先定義的閾值,那么該圖片就可以被認(rèn)為是模糊的。高于閾值,就不是模糊的,或者說是清晰的。
此算法基于以下假設(shè):如果圖片具有較高方差,那么它就有較廣的頻響范圍,代表著正常,聚焦準(zhǔn)確的圖片。
總結(jié):正常圖像中邊界清晰,經(jīng)拉普拉斯計(jì)算后方差較大;模糊圖像邊界信息少,方差小
代碼
import os import cv2 import shutil # 計(jì)算圖片清晰度 def getImageVar(img): res=0 for i in cv2.split(img): # 對圖片用 3x3 拉普拉斯算子做卷積得到邊緣 計(jì)算出方差,并最后返回。 # 函數(shù)求完導(dǎo)數(shù)后會(huì)有負(fù)值,還有會(huì)大于255的值。而原圖像是uint8,即8位無符號數(shù),所以建立的圖像位數(shù)不夠,會(huì)有截?cái)?。因此要使?4位有符號的數(shù)據(jù)類型,即 cv2.CV_64F。 # 再用var函數(shù)求方差 res+=cv2.Laplacian(i, cv2.CV_64F).var() return res/3 # 讀取某個(gè)文件夾下面的所有文件名 返回list def get_all_file(path): all_file=[] for i in os.listdir(path): file_name=os.path.join(path,i) all_file.append(file_name) return all_file input_path=input("請輸出目標(biāo)文件夾:") threshold=int(input("請輸入清晰度閾值:")) orign_path=os.path.join(os.path.abspath('.'),'img') resoure_file_path = os.path.join(orign_path, input_path) # 圖片所在文件夾 vage_file_path=os.path.join(orign_path,'vague') clear_file_path=os.path.join(orign_path,'clear') if not os.path.exists(vage_file_path): os.mkdir(vage_file_path) if not os.path.exists(clear_file_path): os.mkdir(clear_file_path) all_img_path=get_all_file(resoure_file_path) for img_path in all_img_path: img_name=img_path.split('\\')[-1] dst=os.path.join(vage_file_path,img_name) if getImageVar(cv2.imread(img_path))>threshold: dst = os.path.join(clear_file_path, img_name) shutil.copyfile(img_path, dst)
打包成exe:
pyinstaller -F work.py
使用
首先準(zhǔn)備一個(gè)img
文件夾和img_cls.exe
img
文件夾中包含存放需要分類的圖片的文件夾自定義(如test_img)以及將來的兩個(gè)結(jié)果文件夾vague
和clear
雙擊執(zhí)行exe文件,輸入自定義和清晰度門限(高于閾值是清晰,低于閾值是模糊)
結(jié)束之后得到:
兩個(gè)分類文件夾(復(fù)制過來的 原圖片沒動(dòng))
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
pycharm 實(shí)現(xiàn)本地寫代碼,服務(wù)器運(yùn)行的操作
這篇文章主要介紹了pycharm 實(shí)現(xiàn)本地寫代碼,服務(wù)器運(yùn)行的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06深入解析Python中BeautifulSoup4的基礎(chǔ)知識與實(shí)戰(zhàn)應(yīng)用
BeautifulSoup4正是一款功能強(qiáng)大的解析器,能夠輕松解析HTML和XML文檔,本文將介紹BeautifulSoup4的基礎(chǔ)知識,并通過實(shí)際代碼示例進(jìn)行演示,感興趣的可以了解下2024-02-02總結(jié)分析python數(shù)據(jù)化運(yùn)營關(guān)聯(lián)規(guī)則
本文內(nèi)容主要介紹了python數(shù)據(jù)化運(yùn)營中關(guān)聯(lián)規(guī)則的一般應(yīng)用場景,以及關(guān)聯(lián)規(guī)則的實(shí)現(xiàn),并例舉了適應(yīng)的應(yīng)用示例,方便大家更直觀的理解應(yīng)用2021-08-08Python+MySQL隨機(jī)試卷及答案生成程序的示例代碼
這篇文章主要介紹了Python+MySQL隨機(jī)試卷及答案生成程序的示例代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02