educoder之Python數(shù)值計(jì)算庫Numpy圖像處理詳解
NumPy Python數(shù)值計(jì)算重要庫
在圖像處理領(lǐng)域,NumPy可以幫助我們高效地對圖像進(jìn)行處理。通過使用NumPy中的數(shù)組操作,我們可以快速地完成各種基本的圖像處理任務(wù),例如圖像的裁剪、縮放、翻轉(zhuǎn)、色彩模式轉(zhuǎn)換等
讀取和顯示圖像
首先,在處理圖像之前,我們需要將圖像加載到Python程序中。在Python中,可以使用PIL(Python Imaging Library)或OpenCV等庫來讀取圖像。下面是使用PIL庫讀取一張圖片并在窗口中顯示的示例代碼:
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
# 讀入圖片
img = Image.open('test.jpg')
# 顯示圖片
plt.imshow(np.asarray(img))
plt.show()
圖像的大小調(diào)整
接下來,我們看一下如何通過NumPy來調(diào)整圖像的大小。有時(shí)候,我們需要將一個(gè)大尺寸的圖像縮放成小尺寸的圖像。在這里,我們將使用ndarray對象的resize()方法以及scipy.interpolate中的interpolate()方法實(shí)現(xiàn)圖像的縮放。
from scipy import interpolate # 將圖像放大兩倍 scale_factor = 2 image_arr = np.array(img) width, height = image_arr.shape[:2] new_width, new_height = int(scale_factor * width), int(scale_factor * height) # 采用scipy.interpolate的interpolate()方法實(shí)現(xiàn)縮放 a, b = np.linspace(0, width, width), np.linspace(0, height, height) x, y = np.meshgrid(a,b) f = interpolate.interp2d(x, y, image_arr, kind='cubic') new_x, new_y = np.linspace(0, width, new_width), np.linspace(0, height, new_height) new_image_arr = f(new_x, new_y) # 重新轉(zhuǎn)為圖像格式,顯示出來觀察。 new_image = Image.fromarray(np.uint8(new_image_arr)) plt.imshow(np.asarray(new_image)) plt.show()
圖像的翻轉(zhuǎn)
在有些場景下,我們需要將圖像水平或垂直翻轉(zhuǎn)。NumPy中提供了flip()方法來實(shí)現(xiàn)圖像的翻轉(zhuǎn)操作。
# 將圖像水平翻轉(zhuǎn) img_flip_horizontal = np.fliplr(image_arr) # 將圖像垂直翻轉(zhuǎn) img_flip_vertical = np.flipud(image_arr)
圖像縮放和裁剪
調(diào)整圖像大小是常見的圖像處理任務(wù),除此之外,您還可能需要對圖像進(jìn)行裁剪或者縮放的同時(shí)進(jìn)行裁剪。在這里,我們使用與之前一樣的方法,即resize()實(shí)現(xiàn)圖像縮放,并且結(jié)合crop()方法對圖片進(jìn)行裁剪。
# 圖像縮放并裁剪 scale_factor = 2 crop_area = (50, 100, 250, 350) image_arr = np.array(img) width, height = image_arr.shape[1], image_arr.shape[0] new_width, new_height = int(scale_factor * width), int(scale_factor * height) new_image_arr = np.asarray(Image.fromarray(image_arr).resize((new_width, new_height))) # 裁剪圖像 left, upper, right, lower = crop_area cropped_image_arr = new_image_arr[upper:lower, left:right] # 顯示處理過的圖片 plt.imshow(np.asarray(Image.fromarray(cropped_image_arr)))
顏色通道處理
在一些情況下,我們需要進(jìn)行圖像顏色通道處理。例如,我們可能需要將圖像轉(zhuǎn)換為灰度圖像或?qū)θ齻€(gè)顏色通道分別進(jìn)行操作,這可以用于實(shí)現(xiàn)許多視覺處理等算法中。
# 灰度化 gray_image_arr = np.dot(image_arr, [0.2989, 0.5870, 0.1140]) gray_image = Image.fromarray(np.uint8(gray_image_arr)) plt.imshow(np.asarray(gray_image)) # 顏色通道處理 red_channel_arr = np.zeros_like(image_arr) red_channel_arr[:, :, 0] = image_arr[:, :, 0] red_channel_image = Image.fromarray(np.uint8(red_channel_arr)) plt.imshow(np.asarray(red_channel_image)) green_channel_arr = np.zeros_like(image_arr) green_channel_arr[:, :, 1] = image_arr[:, :, 1] green_channel_image = Image.fromarray(np.uint8(green_channel_arr)) plt.imshow(np.asarray(green_channel_image)) blue_channel_arr = np.zeros_like(image_arr) blue_channel_arr[:, :, 2] = image_arr[:, :, 2] blue_channel_image = Image.fromarray(np.uint8(blue_channel_arr)) plt.imshow(np.asarray(blue_channel_image))
圖像濾波
圖像濾波是另一個(gè)有用的圖像處理任務(wù)。NumPy中提供了多種圖像濾波的方法,其中之一是卷積操作。下面的代碼演示如何使用3x3卷積核進(jìn)行圖像平滑化。
# 圖像平滑化 kernel = np.ones((3, 3), np.float32) / 9 smooth_image_arr = cv2.filter2D(image_arr, -1, kernel) # 顯示濾波過后的圖片 plt.imshow(smooth_image_arr)
以上就是educoder之Python數(shù)值計(jì)算庫Numpy圖像處理詳解的詳細(xì)內(nèi)容,更多關(guān)于Python 數(shù)值計(jì)算庫 Numpy的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
opencv3/Python 稠密光流calcOpticalFlowFarneback詳解
今天小編就為大家分享一篇opencv3/Python 稠密光流calcOpticalFlowFarneback詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12
在tensorflow中實(shí)現(xiàn)去除不足一個(gè)batch的數(shù)據(jù)
今天小編就為大家分享一篇在tensorflow中實(shí)現(xiàn)去除不足一個(gè)batch的數(shù)據(jù),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01
Python結(jié)合FFmpeg實(shí)現(xiàn)為視頻添加內(nèi)嵌字幕SRT的完整教程
這篇文章主要為大家詳細(xì)介紹了如何使用?Python?調(diào)用?FFmpeg,將?視頻文件(MP4)與字幕文件(SRT)進(jìn)行無損合并,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2025-11-11
Falsk 與 Django 過濾器的使用與區(qū)別詳解
這篇文章主要介紹了Falsk 與 Django 過濾器的使用與區(qū)別詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-06-06
python實(shí)現(xiàn)PolynomialFeatures多項(xiàng)式的方法
這篇文章主要介紹了python實(shí)現(xiàn)PolynomialFeatures多項(xiàng)式的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

