2019-09-27--GDAL

1. 利用GDAL處理JPG圖像

(1)利用GDAL把a(bǔ)rray存成JPEG

利用GDAL庫(kù)函數(shù)創(chuàng)建圖像時(shí)倚舀,一般會(huì)用到GDALDriver類Create()函數(shù),但是Create()函數(shù)不支持JPEG勤揩、PNG等格式,不過(guò)秘蛔,CreateCopy()支持這些格式陨亡,所以根據(jù)已有的圖像數(shù)據(jù),不能直接創(chuàng)建jpg深员、png格式的圖像负蠕,而要借助GDAL的MEM內(nèi)存文件,來(lái)創(chuàng)建他們辨液。

用GDAL存儲(chǔ)圖像時(shí)的順序?yàn)锽GR(一般彩色圖像都是以BGR存儲(chǔ))虐急,但讀取圖像的順序?yàn)镽GB。

(2)利用GDAL把圖像轉(zhuǎn)換為JPEG

'''
-of 輸出格式滔迈,默認(rèn)GTiff止吁。可以修改為所有GDAL支持的格式
-co create option燎悍。每種格式都有規(guī)定的co敬惦,需要查看格式說(shuō)明。如:JPEG格式谈山,可以使用WORLDFILE=YES(生成worldfile文 件).
-QUALITY=75(設(shè)置壓縮率俄删,默認(rèn)是75%,只能取10~100范圍的值奏路,>95無(wú)法提高質(zhì)量畴椰,但會(huì)增大文件)。
-b n:指定第幾個(gè)波段對(duì)應(yīng)的源數(shù)據(jù)波段數(shù)n鸽粉⌒敝可以有多個(gè)。如果不指定触机,默認(rèn)情況下是一一對(duì)應(yīng)帚戳。
-a_srs assign srs指定的坐標(biāo)系統(tǒng)。
'''
 # 設(shè)置jpg的壓縮率
gdal_translate -of JPEG -co WORLDFILE=YES -co QUALITY=75 j50c4.vrt translatejpeg75.jpg

# 將四波段RGBA的tif轉(zhuǎn)換成JPEG RGB儡首。
gdal_translate -of JPEG -b 1 -b 2 -b 3 source.tif test.jpg

# 重新定義源圖像的坐標(biāo)系統(tǒng)(不能變換片任,只能定義,不改變圖像值)
gdal_translate -a_srs EPSG:32650 -of GTiff J50_lonlat-L12.tif j50-2.tif

2. python不同圖像庫(kù)讀取蔬胯、存儲(chǔ)圖像時(shí)的差異記錄

(1)數(shù)據(jù)維度

數(shù)據(jù)維度為:[Height, Width, Channel] or [Channel, Height, Width]
其中对供,channel也有順序,一般是3波段數(shù)channels=3笔宿,但是順序有差異犁钟,例如opencv對(duì)于讀進(jìn)來(lái)的圖片的通道排列是BGR棱诱,而不是主流的RGB(其他圖像庫(kù)的一般是RGB,cv2的大坑)涝动。

(2)opencv

opencv讀入圖片的矩陣格式是:(height,width,channels)迈勋,讀進(jìn)來(lái)直接是numpy array,數(shù)據(jù)類型是uint8醋粟,可以按照numpy array進(jìn)行數(shù)據(jù)操作靡菇。

import cv2
import numpy as np
#讀入圖片:默認(rèn)彩色圖,cv2.IMREAD_GRAYSCALE灰度圖米愿,cv2.IMREAD_UNCHANGED包含alpha通道
img = cv2.imread('1.jpg')
cv2.imshow('src',img)
print(img.shape) # (h,w,c)
print(img.size) # 像素總數(shù)目
print(img.dtype)
print(img)
cv2.waitKey()

#opencv讀入的矩陣是BGR厦凤,如果想轉(zhuǎn)為RGB,可以這么轉(zhuǎn)
img4 = cv2.imread('1.jpg')
img4 = cv2.cvtColor(img4,cv2.COLOR_BGR2RGB)

或者育苟,使用這種方式较鼓,調(diào)整通道順序channel或band:

im_data_2 = im_data[::-1, :, :]     # RGB2BGR   C*H*N

上述代碼中,在通道順序?yàn)?[Channel, Width, Height]的情況下违柏,第一維度是channel博烂;這種情況下需要確定channel的波段順序是什么,是RGB漱竖,還是BGR禽篱。可以利用代碼中“ im_data[::-1, :, :] ”實(shí)現(xiàn)調(diào)整馍惹,第一維度逆序調(diào)整躺率,第2,3維度不變。

(3)PIL Image

PIL讀進(jìn)來(lái)的圖像是一個(gè)對(duì)象万矾,而不是我們所熟知的numpy 矩陣悼吱。其他庫(kù)讀進(jìn)來(lái)的圖片都是以numpy 矩陣。

from PIL import Image
import numpy as np
img = Image.open('1.jpg')
print(img.format)    # JPG format
print(img.size)     # (w良狈,h)
print(img.mode)  # L為灰度圖舆绎,RGB為真彩色,RGBA為加了透明通道
img.show() # 顯示圖片

gray = Image.open('1.jpg').convert('L')   # 轉(zhuǎn)換為灰度圖

#pillow讀進(jìn)來(lái)的圖片不是矩陣,將圖片轉(zhuǎn)矩陣,channel last
arr = np.array(img)
print(arr.shape)   # [Height, Width, Channel] 
print(arr.dtype)   # uint8
# print(arr)   # print array 

#矩陣再轉(zhuǎn)為圖像
new_im = Image.fromarray(arr)
new_im.save('new.png')

#分離合并通道
r, g, b = img.split()
img = Image.merge("RGB", (b, g, r))
img = img.copy() #復(fù)制圖像

# 利用ROI裁切感興趣區(qū)域的圖像
roi = img.crop((0,0,300,300)) #(左上x(chóng)们颜,左上y,右下x猎醇,右下y)坐標(biāo)
roi.show()  # show ROI picture

(4)skimage:skimage.io.imread

skimage可以讀取超過(guò)3波段的圖像窥突。圖像也是以numpy array形式讀入。

from skimage import io

im = io.imread('1.jpg')
print(im.shape)    # numpy矩陣硫嘶,(h,w,c)
print(im.dtype)    # uint8
print(im.size)    # h*w
io.imshow(im)
io.imsave('sk.png',im)   # save as other picture
print(im)

im2 = io.imread('1.jpg',as_grey=True)  #讀入灰度圖阻问,但是灰度圖像的矩陣的值被歸一化了。
#也可以以這種方式獲得灰度圖:
from skimage import color
im3 = io.imread('1.jpg')
im3 = color.rgb2grey(im3)
print(im3.dtype)
print(im3.size)
print(im3.shape)
io.imshow(im3)
io.show()
'''
skimage.color.rgb2grey(rgb)
skimage.color.rgb2hsv(rgb)
skimage.color.rgb2lab(rgb)
skimage.color.gray2rgb(image)
skimage.color.hsv2rgb(hsv)
skimage.color.lab2rgb(lab)
'''

(5)matplotlib:matplotlib.image.imread

繪圖工具庫(kù)沦疾。plt.imread讀入的就是一個(gè)矩陣称近,跟opencv一樣第队,但彩圖讀進(jìn)的是RGB,與opencv有區(qū)別

import matplotlib.pyplot as plt
import numpy as np

image = plt.imread('1.jpg')
plt.imshow(image)
plt.show()

#也可以關(guān)閉顯示x刨秆,y軸上的數(shù)字
image = plt.imread('1.jpg')
plt.imshow(image)
plt.axis('off')
plt.show()

im_r = image[:,:,0] #紅色通道
plt.imshow(im_r)
plt.show()
#此時(shí)會(huì)發(fā)現(xiàn)顯示的是熱量圖凳谦,不是我們預(yù)想的灰度圖,可以添加 cmap 參數(shù)解決
plt.imshow(im_r,cmap='Greys_r')
plt.show()

(6)總結(jié)

  • 除了opencv讀入的彩色圖片以BGR順序存儲(chǔ)外衡未,其他所有圖像庫(kù)讀入彩色圖片都以RGB存儲(chǔ)尸执。
  • 除了PIL讀入的圖片是img類之外,其他庫(kù)讀進(jìn)來(lái)的圖片都是以numpy 矩陣缓醋。
  • 各個(gè)圖像庫(kù)的性能如失,opencv最佳。

————————————————
參考轉(zhuǎn)載自:
https://blog.csdn.net/hong__fang/article/details/42266215
http://blog.sina.com.cn/s/blog_a7ebc03b0102xaqg.html
https://www.cnblogs.com/skyfsm/p/8276501.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末送粱,一起剝皮案震驚了整個(gè)濱河市褪贵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抗俄,老刑警劉巖脆丁,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異橄镜,居然都是意外死亡偎快,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門洽胶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)晒夹,“玉大人,你說(shuō)我怎么就攤上這事姊氓∝で樱” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵翔横,是天一觀的道長(zhǎng)读跷。 經(jīng)常有香客問(wèn)我,道長(zhǎng)禾唁,這世上最難降的妖魔是什么效览? 我笑而不...
    開(kāi)封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮荡短,結(jié)果婚禮上丐枉,老公的妹妹穿的比我還像新娘。我一直安慰自己掘托,他們只是感情好瘦锹,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般弯院。 火紅的嫁衣襯著肌膚如雪辱士。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天听绳,我揣著相機(jī)與錄音颂碘,去河邊找鬼。 笑死辫红,一個(gè)胖子當(dāng)著我的面吹牛凭涂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贴妻,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼切油,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了名惩?” 一聲冷哼從身側(cè)響起澎胡,我...
    開(kāi)封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎娩鹉,沒(méi)想到半個(gè)月后攻谁,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弯予,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年戚宦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锈嫩。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡受楼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出呼寸,到底是詐尸還是另有隱情艳汽,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布对雪,位于F島的核電站河狐,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏瑟捣。R本人自食惡果不足惜馋艺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望迈套。 院中可真熱鬧丈钙,春花似錦、人聲如沸交汤。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)芙扎。三九已至星岗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間戒洼,已是汗流浹背俏橘。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留圈浇,地道東北人寥掐。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓磷蜀,卻偏偏與公主長(zhǎng)得像召耘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子污它,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350