利用Python實(shí)現(xiàn)批量裁剪圖片
本文旨在介紹基于Python如何批量裁剪圖片并保存,主要內(nèi)容包括以下幾個(gè)方面:
裁剪圖片的原理與方法、Python中用于裁剪圖片的庫、代碼實(shí)現(xiàn)過程以及批量裁剪圖片的實(shí)際案例等。
一、裁剪圖片的原理與方法
圖片裁剪是指將一張圖片中的某一部分選中并保存,通常用于將圖片縮小或者只選取圖片中的部分內(nèi)容。
具體來看,圖片裁剪的過程大致包括以下幾個(gè)步驟:
1.選定裁剪區(qū)域。
需要確定需要裁剪的區(qū)域,以一定的方式選定區(qū)域的位置和大小。
2.選定裁剪方式。
需要確定使用何種方式對(duì)圖片進(jìn)行裁剪,例如按照比例縮放、按照像素大小裁剪、按照像素位置裁剪等。
3.裁剪圖片并保存。
使用選定的裁剪方式對(duì)圖片進(jìn)行裁剪,并將裁剪后的圖片保存到指定的位置。
針對(duì)以上步驟,Python中有許多用于裁剪圖片的庫可以使用,下面將分別介紹。
二、Python中用于裁剪圖片的庫
1.Pillow庫
Pillow是Python的一個(gè)圖像處理庫,提供了許多圖像處理操作,其中也包括圖片裁剪。
使用Pillow裁剪圖片的代碼示例如下:
from PIL import Image # 打開圖片image,并裁剪出左上角為(0,0),右下角為 (100, 100) 的矩形區(qū)域 image = Image.open("image.jpg") rect = (0, 0, 100, 100) crop_image = image.crop(rect) crop_image.show()
以上代碼首先使用Pillow庫中的Image模塊打開了一張名為“image.jpg”的圖片。
然后使用crop()方法對(duì)該圖片進(jìn)行裁剪,裁剪出左上角為(0,0),右下角為(100,100)的矩形區(qū)域。
并將該區(qū)域保存到變量crop_image中,最后使用show()方法展示裁剪后的圖片。
2.opencv-python庫
OpenCV是一個(gè)廣泛應(yīng)用于計(jì)算機(jī)視覺領(lǐng)域的開源計(jì)算機(jī)視覺庫。
它擁有一系列用于圖像處理和計(jì)算機(jī)視覺的函數(shù)、類和工具,并提供了Python的接口。
使用opencv-python庫裁剪圖片的代碼示例如下:
import cv2 # 打開圖片image,并裁剪出左上角為(0,0),右下角為 (100, 100) 的矩形區(qū)域 image = cv2.imread("image.jpg") rect = (0, 0, 100, 100) crop_image = image[rect[1]:rect[3], rect[0]:rect[2]] cv2.imshow("crop_image", crop_image) cv2.waitKey(0) cv2.destroyAllWindows()
以上代碼首先使用opencv-python庫中的imread()方法打開了一張名為“image.jpg”的圖片。
然后使用數(shù)組索引對(duì)該圖片進(jìn)行裁剪,裁剪出左上角為(0,0),右下角為(100,100)的矩形區(qū)域。
并將該區(qū)域保存到變量crop_image中,最后使用imshow()方法展示裁剪后的圖片。
三、代碼實(shí)現(xiàn)過程
在介紹代碼實(shí)現(xiàn)過程之前,需要先安裝Python的圖像處理庫Pillow。
在安裝Pillow庫之前,需要確保已安裝Python版本不低于Python3.7。
安裝Pillow庫的命令為:
pip install Pillow
安裝完成之后,就可以使用Pillow庫中的Image模塊進(jìn)行圖片裁剪操作。
具體實(shí)現(xiàn)步驟如下:
導(dǎo)入Pillow庫中的Image模塊
from PIL import Image
打開需要裁剪的圖片,并設(shè)置需要裁剪的區(qū)域
image_path = "image.jpg" image = Image.open(image_path) rect = (0, 0, 100, 100)
對(duì)圖片進(jìn)行裁剪,并保存到指定路徑
crop_image = image.crop(rect) crop_image.save("crop_image.jpg")
完整的Python裁剪圖片代碼示例如下:
from PIL import Image image_path = "image.jpg" image = Image.open(image_path) rect = (0, 0, 100, 100) crop_image = image.crop(rect) crop_image.save("crop_image.jpg")
以上代碼首先使用Pillow庫中的Image模塊打開了一張名為“image.jpg”的圖片。
然后使用crop()方法對(duì)該圖片進(jìn)行裁剪,裁剪出左上角為(0,0)。
右下角為(100,100)的矩形區(qū)域,并將該區(qū)域保存到名為“crop_image.jpg”的文件中。
四、批量裁剪圖片案例
批量裁剪圖片是指同時(shí)對(duì)指定路徑下所有圖片進(jìn)行裁剪操作。
具體實(shí)現(xiàn)過程與單張圖片裁剪相似,只需要在代碼中對(duì)指定路徑下的所有圖片進(jìn)行循環(huán)即可。
下面是一個(gè)這樣的實(shí)際案例:
需求:批量將指定文件夾下所有圖片的左上角裁剪為正方形并保存。
確定裁剪區(qū)域
裁剪的區(qū)域?yàn)樽笊辖钦叫危笮閳D片中寬度和高度中小的那個(gè)值。
def get_rect(image): width, height = image.size size = min(width, height) rect = (0, 0, size, size) return rect
以上代碼中,get_rect()函數(shù)接收一張PIL格式的圖片作為參數(shù),獲取該圖片的寬度和高度,并計(jì)算出左上角正方形的大小。
最后將左上角正方形的坐標(biāo)和大小封裝成一個(gè)元組并返回。
批量裁剪圖片并保存
對(duì)所有圖片進(jìn)行循環(huán)裁剪,并將裁剪后的圖片保存在指定路徑下。
import os def crop_images(root_path, save_path): images = os.listdir(root_path) for image_name in images: if image_name.endswith(".jpg") or image_name.endswith(".png"): image_path = os.path.join(root_path, image_name) image = Image.open(image_path) rect = get_rect(image) crop_image = image.crop(rect) crop_image.save(os.path.join(save_path, image_name))
以上代碼中,crop_images()函數(shù)接收兩個(gè)參數(shù),root_path表示需要裁剪圖片的文件夾路徑,save_path表示裁剪后保存的文件夾路徑。
首先使用os.listdir()方法獲取root_path文件夾下的所有文件和文件夾名,并對(duì)所有文件進(jìn)行循環(huán)。
如果文件名以“.jpg”或“.png”結(jié)尾,則認(rèn)為該文件是圖片文件,獲取該文件的完整路徑并打開該圖片。
然后調(diào)用get_rect()函數(shù)獲取該圖片需要裁剪的區(qū)域,使用crop()方法進(jìn)行裁剪,并將裁剪后的圖片保存到指定路徑下。
完整的Python批量裁剪圖片代碼示例如下:
from PIL import Image import os def get_rect(image): width, height = image.size size = min(width, height) rect = (0, 0, size, size) return rect def crop_images(root_path, save_path): images = os.listdir(root_path) for image_name in images: if image_name.endswith(".jpg") or image_name.endswith(".png"): image_path = os.path.join(root_path, image_name) image = Image.open(image_path) rect = get_rect(image) crop_image = image.crop(rect) crop_image.save(os.path.join(save_path, image_name)) root_path = "images" save_path = "cropped_images" crop_images(root_path, save_path)
以上代碼假設(shè)存在一個(gè)名為“images”的文件夾,其中包含需要裁剪的所有圖片,裁剪結(jié)果將保存到名為“cropped_images”的文件夾下。
五、總結(jié)
本文詳細(xì)介紹了Python如何通過Pillow庫對(duì)單張或批量圖片進(jìn)行裁剪操作,通過實(shí)際案例演示了批量裁剪圖片的具體實(shí)現(xiàn)過程。
掌握了這些知識(shí),我們可以更加輕松地對(duì)大量圖片進(jìn)行批量處理,節(jié)省時(shí)間和精力。
當(dāng)然,圖片裁剪只是圖像處理的冰山一角,希望通過本文的介紹可以為讀者提供更多啟發(fā),更好地掌握Python圖像處理的技巧和方法。
到此這篇關(guān)于利用Python實(shí)現(xiàn)批量裁剪圖片的文章就介紹到這了,更多相關(guān)Python裁剪圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談pytorch中的nn.Sequential(*net[3: 5])是啥意思
這篇文章主要介紹了pytorch中的nn.Sequential(*net[3: 5])是啥意思,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Python重復(fù)文件批量整理工具的設(shè)計(jì)與實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了如何通關(guān)Python編寫一個(gè)重復(fù)文件批量整理工具,可以在文件夾內(nèi)對(duì)文件進(jìn)行去重和分類存儲(chǔ),有需要的可以了解下2025-02-02BeautifulSoup獲取指定class樣式的div的實(shí)現(xiàn)
這篇文章主要介紹了BeautifulSoup獲取指定class樣式的div的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12將數(shù)據(jù)集制作成VOC數(shù)據(jù)集格式的實(shí)例
今天小編就為大家分享一篇將數(shù)據(jù)集制作成VOC數(shù)據(jù)集格式的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02Python登錄并獲取CSDN博客所有文章列表代碼實(shí)例
這篇文章主要介紹了Python登錄并獲取CSDN博客所有文章列表代碼實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下2017-12-12python爬蟲 基于requests模塊發(fā)起ajax的get請(qǐng)求實(shí)現(xiàn)解析
這篇文章主要介紹了python爬蟲 基于requests模塊發(fā)起ajax的get請(qǐng)求實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08