(资料图)
在图像处理领域,NumPy可以帮助我们高效地对图像进行处理。通过使用NumPy中的数组操作,我们可以快速地完成各种基本的图像处理任务,例如图像的裁剪、缩放、翻转、色彩模式转换等
首先,在处理图像之前,我们需要将图像加载到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()
接下来,我们看一下如何通过NumPy来调整图像的大小。有时候,我们需要将一个大尺寸的图像缩放成小尺寸的图像。在这里,我们将使用ndarray对象的resize()方法以及scipy.interpolate中的interpolate()方法实现图像的缩放。
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()方法实现缩放 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) # 重新转为图像格式,显示出来观察。 new_image = Image.fromarray(np.uint8(new_image_arr)) plt.imshow(np.asarray(new_image)) plt.show()
在有些场景下,我们需要将图像水平或垂直翻转。NumPy中提供了flip()方法来实现图像的翻转操作。
# 将图像水平翻转 img_flip_horizontal = np.fliplr(image_arr) # 将图像垂直翻转 img_flip_vertical = np.flipud(image_arr)
调整图像大小是常见的图像处理任务,除此之外,您还可能需要对图像进行裁剪或者缩放的同时进行裁剪。在这里,我们使用与之前一样的方法,即resize()实现图像缩放,并且结合crop()方法对图片进行裁剪。
# 图像缩放并裁剪 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)))
在一些情况下,我们需要进行图像颜色通道处理。例如,我们可能需要将图像转换为灰度图像或对三个颜色通道分别进行操作,这可以用于实现许多视觉处理等算法中。
# 灰度化 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))
图像滤波是另一个有用的图像处理任务。NumPy中提供了多种图像滤波的方法,其中之一是卷积操作。下面的代码演示如何使用3x3卷积核进行图像平滑化。
# 图像平滑化 kernel = np.ones((3, 3), np.float32) / 9 smooth_image_arr = cv2.filter2D(image_arr, -1, kernel) # 显示滤波过后的图片 plt.imshow(smooth_image_arr)
以上就是educoder之Python数值计算库Numpy图像处理详解的详细内容,更多关于Python 数值计算库 Numpy的资料请关注脚本之家其它相关文章!
上一篇:环球新资讯:58同城大连招聘物业经理信息(58同城大连招聘)
下一篇:最后一页
2023年5月30日钜泉科技连续3日融资净偿还累计273 12万元
东吴证券05月30日发布研报称,给予晶盛机电(300316 SZ,最新价:69 65
近日,受降雨天气影响,地处太行山北端的河北省涞源县白石山地质公园
生态浮床,关于生态浮床介绍这个很多人还不知道,我们一起来看看!1、生
2022年,全国公安机关破获电信网络诈骗犯罪案件46 4万起,缉捕电信网络
相信大家对晴日暖风生麦气,迈腾暖风不热是什么原因?的问题都很疑惑,
1、太祖天命爱新觉罗·努尔哈赤太宗天聪爱新觉罗·皇太极崇德世祖顺治
1、近日,热闹了大半年的《演员》走到了最后一期,今次的年度总冠军也
根据近期国际市场油价变化情况按照现行成品油价格形成机制自2023年5月3
1、“初唐四杰”除了王勃、杨炯、卢照邻,还有骆宾王。2、“初唐四杰”
X 关闭
商务部:2022年外贸规模预计再创新高 全力推动外贸稳规模、优结构
商家反向抹零事件屡见不鲜 当地市监局最新回应将“零容忍”态度打击
一季度厨房小家电再下滑 产品黏性需求需加强
市场增长点在哪儿?细分品类存在丰富的增量红利
劳模雷军还能“躺赢”吗?小米发布2022一季度财报净利腰斩
疫情下青海西宁“监管蓝”的“十二时辰”
X 关闭