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