1. 程式人生 > 其它 >語義變化檢測程式碼-02-tif格式影像轉png影象

語義變化檢測程式碼-02-tif格式影像轉png影象

  雖然我的研究方向是遙感影像的變化檢測,但說到底,還是計算機視覺的分支的感覺。

  計算機視覺方面,處理的影象多是jpg、png等格式的影像,他們通常是三波段RGB影象,而遙感影像卻不同,一般稱作遙感影像,最少也是有四個波段(紅、綠、藍和近紅)的TIF格式影像,有時我們想將計算機視覺方面的成熟應用遷移到遙感影像的相關方向上,既可以修改原始程式碼使之可以處理TIF格式的資料(利用gdal庫),也可以將tif格式的影像轉換成png格式的從而直接應用看看效果。

程式碼

  以下程式碼是將一個資料夾的所有tif格式的檔案,轉換成png格式的影象後,存到另一個資料夾中。

程式碼內容

from PIL import Image
import os
import cv2 as cv
import re
import numpy as np

# 更改路徑
# files_path是存放tif格式影象的資料夾
# out_path是存放輸出的png格式影象的資料夾
files_path = r"D:\img2_split_tif"
out_path = r'D:\img2_png/'

imagesDirectory = files_path

for imageName in os.listdir(imagesDirectory):
    imagePath = os.path.join(imagesDirectory, imageName)
    img = cv.imread(imagePath, 1)
    file_name = re.split("[\\\ ,.]", imagePath)
    cv.imwrite(out_path + file_name[-2] + ".png", img)

程式碼註釋

# 以tiff轉png為例,其他格式同理
# 程式碼中路徑更改為自己影象存放路徑即可
# PIL是處理影象的庫,但這裡好像沒有用到,因為好像利用PIL輸出的影象的檔案顏色與tif原始影象的顏色不同
from PIL import Image
# os是處理檔案路徑的庫
import os
# cv2是計算機視覺讀取影象的庫
import cv2 as cv
# re是正則表示式的庫,在本程式被用來按條件分割字元re.split()
import re
# numpy是矩陣操作的庫
import numpy as np

files_path = r"D:\img2_split_tif"
out_path = r'D:\img2_png/'

# tiff圖片所在資料夾路徑
# 這裡imageDirectory與files_path作用重複了
# 因為一開始路徑是寫在程式裡的,我將他們拿出來存放在變數裡,放在程式的開頭部分
# 這樣更直接方便的修改路徑
imagesDirectory = files_path

# os.listdir()獲取資料夾內所有tif格式檔案的名字,利用for逐個遍歷
for imageName in os.listdir(imagesDirectory):
    # 與tif影象所在的資料夾的路徑相連,獲得所有tif檔案的絕對路徑
    imagePath = os.path.join(imagesDirectory, imageName)
    # 讀取tif格式影象,1表示按照彩色讀取,即便是多波段,也會在這裡被只讀取三波段
    img = cv.imread(imagePath, 1)
    # 將tif格式檔案的檔案的名字獲取:比如d:\img1_split_tif\num2.tif,那麼就只獲取檔名:num2
    file_name = re.split("[\\\ ,.]", imagePath)
    # 將輸出路徑+檔名+png字尾連線在一起,將讀取的資料輸出為png格式的影象
    cv.imwrite(out_path + file_name[-2] + ".png", img)


參考連結

正確參考
https://blog.csdn.net/qq_39797713/article/details/103716488

錯誤參考
https://blog.csdn.net/weixin_45063618/article/details/115969543

怎麼會有人做直接改tif字尾為png這種事情……