1. 程式人生 > >python數字影象處理(6):影象的批量處理

python數字影象處理(6):影象的批量處理

有些時候,我們不僅要對一張圖片進行處理,可能還會對一批圖片處理。這時候,我們可以通過迴圈來執行處理,也可以呼叫程式自帶的圖片集合來處理。

圖片集合函式為:

skimage.io.ImageCollection(load_pattern,load_func=None)

這個函式是放在io模組內的,帶兩個引數,第一個引數load_pattern, 表示圖片組的路徑,可以是一個str字串。第二個引數load_func是一個回撥函式,我們對圖片進行批量處理就可以通過這個回撥函式實現。回撥函式預設為imread(),即預設這個函式是批量讀取圖片。

先看一個例子:

import skimage.io as io
from skimage import data_dir str=data_dir + '/*.png' coll = io.ImageCollection(str) print(len(coll))

顯示結果為25, 說明系統自帶了25張png的示例圖片,這些圖片都讀取了出來,放在圖片集合coll裡。如果我們想顯示其中一張圖片,則可以在後加上一行程式碼:

io.imshow(coll[10])

顯示為:

如果一個資料夾裡,我們既存放了一些jpg格式的圖片,又存放了一些png格式的圖片,現在想把它們全部讀取出來,該怎麼做呢?

import skimage.io as io
from
skimage import data_dir str='d:/pic/*.jpg:d:/pic/*.png' coll = io.ImageCollection(str) print(len(coll))

注意這個地方'd:/pic/*.jpg:d:/pic/*.png' ,是兩個字串合在一起的,第一個是'd:/pic/*.jpg', 第二個是'd:/pic/*.png' ,合在一起後,中間用冒號來隔開,這樣就可以把d:/pic/資料夾下的jpg和png格式的圖片都讀取出來。如果還想讀取存放在其它地方的圖片,也可以一併加進去,只是中間同樣用冒號來隔開。

io.ImageCollection()這個函式省略第二個引數,就是批量讀取。如果我們不是想批量讀取,而是其它批量操作,如批量轉換為灰度圖,那又該怎麼做呢?

那就需要先定義一個函式,然後將這個函式作為第二個引數,如:

複製程式碼
from skimage import data_dir,io,color

def convert_gray(f):
    rgb=io.imread(f)
    return color.rgb2gray(rgb)
    
str=data_dir+'/*.png'
coll = io.ImageCollection(str,load_func=convert_gray)
io.imshow(coll[10])
複製程式碼

這種批量操作對視訊處理是極其有用的,因為視訊就是一系列的圖片組合

複製程式碼
from skimage import data_dir,io,color

class AVILoader:
    video_file = 'myvideo.avi'

    def __call__(self, frame):
        return video_read(self.video_file, frame)

avi_load = AVILoader()

frames = range(0, 1000, 10) # 0, 10, 20, ...
ic =io.ImageCollection(frames, load_func=avi_load)
複製程式碼

這段程式碼的意思,就是將myvideo.avi這個視訊中每隔10幀的圖片讀取出來,放在圖片集合中。

得到圖片集合以後,我們還可以將這些圖片連線起來,構成一個維度更高的陣列,連線圖片的函式為:

skimage.io.concatenate_images(ic)

帶一個引數,就是以上的圖片集合,如:

from skimage import data_dir,io,color

coll = io.ImageCollection('d:/pic/*.jpg')
mat=io.concatenate_images(coll)

使用concatenate_images(ic)函式的前提是讀取的這些圖片尺寸必須一致,否則會出錯。我們看看圖片連線前後的維度變化:

複製程式碼
from skimage import data_dir,io,color

coll = io.ImageCollection('d:/pic/*.jpg')
print(len(coll))      #連線的圖片數量
print(coll[0].shape)   #連線前的圖片尺寸,所有的都一樣
mat=io.concatenate_images(coll)
print(mat.shape)  #連線後的陣列尺寸
複製程式碼

顯示結果:

2
(870, 580, 3)
(2, 870, 580, 3)

可以看到,將2個3維陣列,連線成了一個4維陣列

如果我們對圖片進行批量操作後,想把操作後的結果儲存起來,也是可以辦到的。

例:把系統自帶的所有png示例圖片,全部轉換成256*256的jpg格式灰度圖,儲存在d:/data/資料夾下

改變圖片的大小,我們可以使用tranform模組的resize()函式,後續會講到這個模組。

複製程式碼
from skimage import data_dir,io,transform,color
import numpy as np

def convert_gray(f):
     rgb=io.imread(f)    #依次讀取rgb圖片
     gray=color.rgb2gray(rgb)   #將rgb圖片轉換成灰度圖
     dst=transform.resize(gray,(256,256))  #將灰度圖片大小轉換為256*256
     return dst
    
str=data_dir+'/*.png'
coll = io.ImageCollection(str,load_func=convert_gray)
for i in range(len(coll)):
    io.imsave('d:/data/'+np.str(i)+'.jpg',coll[i])  #迴圈儲存圖片
複製程式碼

 結果:

相關推薦

python數字影象處理6影象批量處理

有些時候,我們不僅要對一張圖片進行處理,可能還會對一批圖片處理。這時候,我們可以通過迴圈來執行處理,也可以呼叫程式自帶的圖片集合來處理。 圖片集合函式為: skimage.io.ImageCollection(load_pattern,load_func=None) 這個函式是放在io模組內的,帶兩

python實戰筆記之6使用代理處理反爬抓取微信文章

搜狗(http://weixin.sogou.com/)已經為我們做了一層微信文章的爬取,通過它我們可以獲取一些微信文章的列表以及微信公眾號的一些資訊,但是它有很多反爬蟲的措施,可以檢測到你的IP異常,然後把你封掉。本文采用代理的方法處理反爬來抓取微信文章。 (1)目標站點

python數字影象處理2影象的讀取、顯示與儲存

skimage提供了io模組,顧名思義,這個模組是用來圖片輸入輸出操作的。為了方便練習,也提供一個data模組,裡面嵌套了一些示例圖片,我們可以直接使用。 引入skimage模組可用: 1 from skimage import io

python數字影象處理3影象畫素的訪問與裁剪

圖片讀入程式中後,是以numpy陣列存在的。因此對numpy陣列的一切功能,對圖片也適用。對陣列元素的訪問,實際上就是對圖片畫素點的訪問。 彩色圖片訪問方式為: img[i,j,c] i表示圖片的行數,j表示圖片的列數,c表示圖片的通道數(RGB三通道分別對應0,1

python數字影象處理18高階形態學處理

形態學處理,除了最基本的膨脹、腐蝕、開/閉運算、黑/白帽處理外,還有一些更高階的運用,如凸包,連通區域標記,刪除小塊區域等。 1、凸包 凸包是指一個凸多邊形,這個凸多邊形將圖片中所有的白色畫素點都包含在內。 函式為: skimage.morphology.conv

python數字影象處理5影象的繪製

實際上前面我們就已經用到了影象的繪製,如: io.imshow(img)   這一行程式碼的實質是利用matplotlib包對圖片進行繪製,繪製成功後,返回一個matplotlib型別的資料。因此,我們也可以這樣寫: import matplotlib.pyplot as plt plt.imsh

python數字影象處理11影象自動閾值分割

影象閾值分割是一種廣泛應用的分割技術,利用影象中要提取的目標區域與其背景在灰度特性上的差異,把影象看作具有不同灰度級的兩類區域(目標區域和背景區域)的組合,選取一個比較合理的閾值,以確定影象中每個畫素點應該屬於目標區域還是背景區域,從而產生相應的二值影象。 在skimage庫中,閾值分割的功能是放在fi

python數字影象處理10影象簡單濾波

對影象進行濾波,可以有兩種效果:一種是平滑濾波,用來抑制噪聲;另一種是微分運算元,可以用來檢測邊緣和特徵提取。 skimage庫中通過filters模組進行濾波操作。 1、sobel運算元 sobel運算元可用來檢測邊緣 函式格式為:skimage.filters.sobel(image, mas

Python 影象處理 OpenCV 6影象的閾值處理

![](https://cdn.geekdigging.com/opencv/opencv_header.png) 前文傳送門: [「Python 影象處理 OpenCV (1):入門」](https://www.geekdigging.com/2020/05/17/5513454552/) [「Pyt

c語言數字影象處理閾值處理

定義 全域性閾值處理 假設某一副灰度圖有如下的直方圖,該影象由暗色背景下的較亮物體組成,從背景中提取這一物體時,將閾值T作為分割點,分割後的影象g(x, y)由下述公式給出,稱為全域性閾值處理   多閾值處理 本文僅完成全域性閾值處理的演算法實現 基本全域性閾值處理方法

OpenCV-Python 影象處理影象的讀取、顯示與儲存

說明: 本系列主要是學習OpenCV-Python文件的個人筆記。 很少有理論的敘述,都是函式名、引數描述、作用、應用場景、程式碼、效果圖。簡單明瞭,即學即用。 目標 學會讀取、顯示、儲存單張影象 對應的函式分佈為:cv2.imread() ,

python快速學習系列6面向物件程式設計OOP

一、面向物件程式設計: 1.比設計模式更重要的是設計原則: 1)面向物件設計的目標: ·可擴充套件:新特性很容易新增到現有系統中,基本不影響系統原有功能 ·可修改:當修改某一部分程式碼時,不會影響到其他不相關的部分 ·可替代:用具有相同介面的程式碼去替換系統中某一部分程式碼時,系統不受影

python數字影象處理13基本形態學濾波

對影象進行形態學變換。變換物件一般為灰度圖或二值圖,功能函式放在morphology子模組內。 1、膨脹(dilation) 原理:一般對二值影象進行操作。找到畫素值為1的點,將它的鄰近畫素點都設定成這個值。1值表示白,0值表示黑,因此膨脹操作可以擴大白色值範圍,壓縮黑色值範圍。一般用來擴充邊緣或填充

python數字影象處理15霍夫線變換

在圖片處理中,霍夫變換主要是用來檢測圖片中的幾何形狀,包括直線、圓、橢圓等。 在skimage中,霍夫變換是放在tranform模組內,本篇主要講解霍夫線變換。 對於平面中的一條直線,在笛卡爾座標系中,可用y=mx+b來表示,其中m為斜率,b為截距。但是如果直線是一條垂直線,則m為無窮大,所有通常我們

c語言數字影象處理二維離散傅立葉變換

基礎知識 複數表示 C = R + jI 極座標:C = |C|(cosθ + jsinθ) 尤拉公式:C = |C|ejθ 有關更多的時域與複頻域的知識可以學習複變函式與積分變換,本篇文章只給出DFT公式,性質,以及實現方法 二維離散傅立葉變換(DFT) 其中f(x,y)為原影象,F(u,

c語言數字影象處理邊緣檢測

背景知識 邊緣畫素是影象中灰度突變的畫素,而邊緣是連線邊緣畫素的集合。邊緣檢測是設計用來檢測邊緣畫素的區域性影象處理方法。 孤立點檢測 使用<https://www.cnblogs.com/GoldBeetle/p/9744625.html>中介紹的拉普拉斯運算元 輸出影象為 卷積模

岡薩雷斯數字影象處理第三章灰度變換與空間濾波1——基本灰度變換函式

一、前言 空間域指影象平面本身。這類影象處理方法直接以影象中的畫素操作為基礎。這是相對於變換域中的影象處理而言的。變換域的影象處理首先把一幅影象變換到變換域,在變換域中進行處理,然後通過反變換把處理結果返回到空間域 空間域處理主要分為灰度變換和空間濾波兩類。 灰度變換在影象的單個畫素上操

岡薩雷斯數字影象處理第二章數字圖形基礎——數學工具

陣列操作與矩陣操作的區別: 也就是說,除非特別說明,否則以後所提到的矩陣之間的操作都是元畫素與對應畫素之間的操作。 線性運算與非線性運算(和純數學裡面的定義相同): 例如,求和是線性運算,取最大值是非線性運算 灰度影象的集合與邏輯運算: 在灰度影象領域,集合的

岡薩雷斯數字影象處理第二章數字圖形基礎——影象內插,相鄰畫素,鄰接性,距離度量

1.影象內插:從根本上看,內插是用已知資料來估計未知位置的數值的處理。 例如,假設一幅大小為500500畫素的影象要放大1.5倍到75075畫素,一種簡單的放大方法是建立一個假想的750750網格,它與原始影象有相同的間隔,然後將其收縮,使它準確的與原影象匹配。顯然,收縮後的750750網格

岡薩雷斯數字影象處理第一章緒論

一、影象處理基本步驟 圖片來源:數字影象處理 第三版 岡薩雷斯 1.影象獲取與給出一幅數字形式的影象一樣簡單。通常,影象獲取截斷包括影象預處理,譬如影象縮放 2.影象增強是對一幅影象進行某種擦歐洲哦,使其結果在特定應用匯總比原始影象更適合進行處理。 3.影象復原也是改進影象外觀的一個處