基本介紹
圖像增強技術的作用,簡單點說,就是通過對圖像進行加工處理,使圖像能更好的在其他領域起作用,比如人臉識別,圖像分類等人工智能領域,又或者是在通信領域,通過加工恢復圖像在傳輸中丟失的某些東西。
那么什么又是圖像增強呢?通過對圖像進行一些加工,從簡單的裁剪、變換灰度等到復雜的各種濾波公式去噪點等等 ,大致滿足以下兩點的都屬于圖像增強的一部分。
1.改變圖像視覺效果,使其能更好的應用在某類場景中
2.突出圖片某部分特征,滿足某些特殊分析的需要。
在實現具體算法,我們總需要先思考大致的思路。學習圖像增強技術也是如此,在學習這門新技術前,我們可以根據一些以往的經驗先想想大概要做些什么。
- 圖像的收集
- 圖像的輸入
- 圖像的處理
- 圖像的輸出
圖像的收集
這里主要涉及的是從視頻中截取我們需要的圖片。需要使用到的軟件“ffmpeg”。
安裝
通過網頁搜索直接進入官網點擊“Download”,選擇自己電腦系統后,點擊下方紅色勾
選區域,進入下載界面,只用看自己電腦是64位/32位,點擊下載。
下載好后,配置環境變量。
右鍵‘我的電腦’,--屬性—高級系統設置—環境變量—用戶變量—編輯‘path’—添加ffmpeg軟件的文件夾下的bin文件的路徑。
使用
通過‘cmd’命令行執行以下操作:
‘ffmpeg -i F -r K -f image2 image-%05d.jpg’
F:需要處理視頻的地址。
K:填一個數字表示每秒截幾張圖,填類似1/1的形式表示一幀截一張圖。
其他更詳細用法可以自行百度,溫馨提示:在哪個文件夾執行命令操作生成
的圖片就保存在哪個文件夾。
圖像的輸入
很多時候我們需要處理的是大量的圖片,這就需要批量的處理文件。
| #需要用到os和cv2庫(安裝請安裝opencv,導入請導入cv2
imagelist=os.listdir(path)#讀取path目錄下所有文件的名字
for i in imagelist:
if(i.endswith('.jpg' or '.png')):
#如果文件以jpg或者png結尾image=cv2.imread(path+'/'+i)#讀取圖片
圖像的處理
圖像增強技術的處理技術很多,先從一些簡單操作開始。如圖像的裁剪、旋轉、鏡像翻轉和縮放等基本操作開始,主要使用cv2庫。
#裁剪(crop)
Image=cv2.imread(‘某張圖片地址’) #讀取圖片
sp=image.shape #讀取圖像的形狀信息并通過數組輸出[圖像的高,圖像的寬,圖像通道數]
h=sp[0]
w=sp[1]
#截取圖像某個區域,可配合random庫隨機截取,也可以自己設置截取范圍
y1=int((1/3)*h)
y2=int((2/3)*h)
x1=int((1/3)*w)
x2=int((2/3)*w)
img=image[y1:y2,x1:x2]
#將圖片左上角視為原點,截取y1到y2、x1到x2的區域
#旋轉(roating)
h,w=image.shape[:2]
#圖片旋轉
#degree旋轉角度,size旋轉后的大小,填1為等比例旋轉。
M = cv2.getRotationMatrix2D(center, degree, size)
#執行旋轉操作,roated為旋轉后的圖片
roated = cv2.warpAffine(image, M, (w, h))
#鏡像翻轉(flip)
image=cv2.imread(path)
image=cv2.flip(image,1)#圖片翻轉
#縮放
image=cv2.imread(path)
image=cv2.resize(image,(192,192))#括號內填縮放后的大小
圖像的輸出
除了直接保存為圖片形式外
我們在使用這些處理后的圖片時,更多的要用到名為“npz”的文件格式。
data=[]#該數組用于存儲圖片
label=[]#用于儲存圖片類型,看一個實例
pathone='D:\\imgCut\\Archive\\resize\\nosmoke'#無煙集圖片地址
pathtwo="D:\\imgCut\\Archive\\resize\\smoke"#有煙集圖片地址
#0代表無煙圖片,1代表有煙圖片
def saveZ(pathone,pathtwo):
data=[]
label=[]
imagelist_one=os.listdir(pathone)#讀取目錄下所有文件的名字
imagelist_two=os.listdir(pathtwo)
for i in imagelist_one:
if(i.endswith('.jpg' or '.png')):
#如果文件以jpg結尾
image=cv2.imread(pathone+'\\\\'+i)
data.append(image)#將圖片加入數組,這里存入的是圖片本身而不是一個引用。
label.append(0)
for i in imagelist_two:
if(i.endswith('.jpg' or '.png')):
#如果文件以jpg結尾
image=cv2.imread(pathtwo+'\\\\'+i)
data.append(image)
label.append(1)
np.savez('arc.npz', data=data, label=label)
#文件以npz形式儲存,里面有兩個數組data,label
之后我們就可以在其他地方直接調用這個文件里的數組
arc=np.load('arc.npz')#導入這個文件data=arc['data']#讀取里面的data數組和label數組label=arc['label']
-
圖像處理
+關注
關注
27文章
1302瀏覽量
56902 -
人工智能
+關注
關注
1796文章
47704瀏覽量
240364 -
人臉識別
+關注
關注
76文章
4021瀏覽量
82332
發布評論請先 登錄
相關推薦
評論