10个使用NumPy就可以进行的图像处理步骤

图像处理是一种数学计算。数字图像由称为像素的彩色小点组成。每个像素由红、绿、蓝(RGB)三个独立的颜色组成。每个像素中的主色由每个RGB分量的数值决定。

本文将介绍10个使用使用NumPy就可以进行的图像处理步骤,虽然有更强大的图像处理库,但是这些简单的方法可以让我们更加熟练的掌握NumPy的操作。

我们首先使用pillow读取图像

 import numpy as np#Use PIL to access image datafrom PIL import Imageimg = Image.open('monalisa.jpg')#Create array from image data M = np.array(img)#Display array from image data display(Image.fromarray(M))

1、缩小图像

 def reduce_image_size_by_n(image, n):# Get the height and width of the imageheight, width, channels = image.shape# Reduce the height and width by nnew_height = height // nnew_width = width // n# Create a new array to store the reduced imagedownsampled_image = np.zeros((new_height, new_width, channels), dtype=image.dtype)# Iterate over each pixel of the reduced imagefor i in range(new_height):for j in range(new_width):# Take every other pixel along each axis to reduce the imagedownsampled_image[i, j] = image[n*i, n*j]return downsampled_image#Try the function using n = 2reduced_M = reduce_image_size_by_n(M, 2)display(reduced_M)

2、水平翻转

 def flip_image(image):# Takes all rows in image (:) and reverses it the order of columns (::-1)flip_image = image[:, ::-1]return flip_image#Try function using reduced imagedisplay(flip_image(reduced_M))

3、垂直翻转

 def rotate_image (image, n):# rotate image using rot90, use n to determine number of rotation rotated_img = Image.fromarray(np.rot90(image, k=n, axes=(1, 0)))return rotated_img#rotate image twice (n=2)display(rotate_image(reduced_M, 2))

4、裁剪图像

 def crop_image(image, crop_ratio, zoom_ratio):#create focused part using crop_ratio and zoom_ratio of choicetop = image.shape[0] // crop_ratio bottom = zoom_ratio * image.shape[0] // crop_ratioleft = image.shape[1] // crop_ratioright = zoom_ratio * image.shape[1] // crop_ratio# Extract the focused part using array slicingfocused_part = image[top:bottom, left:right]return focused_partdisplay(crop_image(reduced_M, 4, 2))

5、RGB通道

 def RGB_image(image,image_color):if image_color == 'R':#make a copy of image for the color channelimg_R = image.copy()#set other color channel to zero. Here Red is the first channel [0] img_R[:, :, (1, 2)] = 0return img_Relif image_color == 'G':img_G = image.copy()#set other color channel to zero. Here Green is the second channel [1]img_G[:, :, (0, 2)] = 0return img_Gelif image_color == 'B':img_B = image.copy()#set other color channel to zero. Here Blue is the third channel [2]img_B[:, :, (0, 1)] = 0return img_B

查看红色通道

 M_red = Image.fromarray(RGB_image(reduced_M, 'R'))display(M_red)

绿色

 M_green = Image.fromarray(RGB_image(reduced_M, 'G'))display(M_green)

蓝色

 M_blue = Image.fromarray(RGB_image(reduced_M, 'B'))display(M_blue)

6、应用滤镜

这里使用棕褐色(Sepia)作为示例,可以根据不同的要求修改转换矩阵

 def apply_sepia(image):# Sepia transformation matrixsepia_matrix = np.array([[0.393, 0.769, 0.189],[0.349, 0.686, 0.168],[0.272, 0.534, 0.131]])# Apply the sepia transformationsepia_img = image.dot(sepia_matrix.T)  # Using matrix multiplication# Ensure values are within valid range [0, 255]sepia_img = np.clip(sepia_img, 0, 255)return sepia_img.astype(np.uint8)# Apply sepia effectM_sepia = Image.fromarray(apply_sepia(reduced_M))display(M_sepia)

7、灰度化

灰度化可以简单的理解为将RBG三个通道合并成一个黑白的通道

 import numpy as npdef grayscale(image):# Convert the RGB image to grayscale using weighted averagegrayscale_img = np.dot(image[..., :3], [0.2989, 0.5870, 0.1140])# Ensure values are within valid range [0, 255]grayscale_img = np.clip(grayscale_img, 0, 255)# Convert to uint8 data typegrayscale_img = grayscale_img.astype(np.uint8)return grayscale_img# Convert the image to grayscaleM_gray = grayscale(reduced_M)display(M_gray)

8、像素化

像素是一个一个色块组成的,像素化顾名思义就是将图像分成一定的区域,并将这些区域转换成相应的色块,再有色块构成图形。类似于色彩构图。简单来说,就是把矢量图形转换成像素点组成的点阵图形,也叫栅格化。

 def pixelate_image(image, block_size):# Determine the number of blocks in each dimensionnum_blocks_y = image.shape[0] // block_sizenum_blocks_x = image.shape[1] // block_size# Calculate the average color for each blockblock_means = np.zeros((num_blocks_y, num_blocks_x, 3), dtype=np.uint8)for y in range(num_blocks_y):for x in range(num_blocks_x):block = image[y * block_size: (y + 1) * block_size,x * block_size: (x + 1) * block_size]block_mean = np.mean(block, axis=(0, 1))block_means[y, x] = block_mean.astype(np.uint8)# Upsample block means to original image sizepixelated_image = np.repeat(np.repeat(block_means, block_size, axis=0), block_size, axis=1)return pixelated_image# Set the block size for pixelation (adjust as needed)block_size = 10# Pixelate the imageM_pixelated = Image.fromarray(pixelate_image(reduced_M, block_size))display(M_pixelated)

更通俗的的讲就是我的世界风格的图像

9、二值化(Binarize)

二值化是将数值型特征取值阈值化转换为布尔型特征取值,或者通俗的讲就是设定一个阈值,超过阈值设置成ture,否则设置成false

 def binarize_image(image, threshold):#set pixel value greater than threshold to 255binarize_image = ((image > threshold) * 255).astype(np.uint8)return binarize_image#set thresholdthreshold = 68M_binarized = Image.fromarray(binarize_image(reduced_M, threshold))display(M_binarized)

10、图像融合

最简单的图像同和方法就是根据不同的透明度,对2张图象的像素求和相加,如下所示

 #import and resize second image img_2 = np.array(Image.open('Eiffel.jpg').resize(reduced_M.shape[1::-1]))  def blend_image(image1, image2, , visibility_2 ):#blend images by multiplying by visibility ratio for each imageblend_image = (image1 * visibility_1 + image2 * visibility_2).astype(np.uint8)return blend_imagemodified_image = Image.fromarray(blend_image(reduced_M, img_2, 0.7, 0.3))display(modified_image)

总结

对于图像的操作其实就是对于图像进行数组操作的过程,我们这里展示的一些简单的操作只是为了熟悉Numpy的操作,如果需要更加专业的操作请使用更加专业的库,例如OpenCV或者Pillow。

https://avoid.overfit.cn/post/da27bd78da0b4d76b639c0f9810fb6e0

作者:Ayo Akinkugbe

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/5461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

光伏管理系统:降本增效解决方案。

现在是光伏发展的重要节点,如何在众多同行中脱颖而出并且有效的达到降低成本、提高效率也是很多企业都在考虑的问题,鹧鸪云的团队研发出了光伏管理系统,通过更高效、更智能、更全面的管理方式来帮助企业实现降本增效的转型,小编带…

公考学习平台|基于SprinBoot+vue的公考学习平台(源码+数据库+文档)

公考学习平台目录 目录 基于SprinBootvue的公考学习平台 一、前言 二、系统设计 三、系统功能设计 5.1用户信息管理 5.2 视频信息管理 5.3公告信息管理 5.1论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&…

笔记-word导出PDF老是更新域导致图片和表格题注发生变化

问题描述:微软word 导出PDF时,老是更新域,导致图片和表格题注否跟着变化 以下是解决方法的具体描述。 目录 一、准备工作二、操作步骤 一、准备工作 1、工具版本:微软 word 2016(其他微软word版本也OK) …

【自研网关系列】过滤器链 -- 鉴权过滤器

🌈Yu-Gateway::基于 Netty 构建的自研 API 网关,采用 Java 原生实现,整合 Nacos 作为注册配置中心。其设计目标是为微服务架构提供高性能、可扩展的统一入口和基础设施,承载请求路由、安全控制、流量治理等…

智能化未来:Agent AI智能体的崛起与全球挑战

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

Redis源码学习记录:列表 (ziplist)

ziplist redis 源码版本&#xff1a;6.0.9。ziplist 的代码均在 ziplist.c / ziplist.h 文件中。 定义 ziplist总体布局如下&#xff1a; <zlbytes> <zltail> <zllen> <entry> <entry> ... <entry> <zlend> zlbytes&#xff1a;uin…

高德优评项目,一单29.9,拷贝+评价,日入500

项目概述&#xff1a; 下载 地 址 &#xff1a; laoa1.cn/1836.html 本项目的核心非常简单&#xff0c;即在高德地图上撰写评论。每条评论完成后&#xff0c;参与者将获得8元的奖励。 此外&#xff0c;高德地图还会提供视频会员作为奖励。我们可以将这些视频会员进行变现…

LLM 构建Data Multi-Agents 赋能数据分析平台的实践之③:数据分析之二(大小模型协同)

一、概述 随着新一代信息技术在产业数字化中的应用&#xff0c;产生了大量多源多模态信息以及响应的信息处理模式&#xff0c;数据孤岛、模型林立的问题也随之产生&#xff0c;使得业务系统臃肿、信息处理和决策效率低下&#xff0c;面对复杂任务及应用场景问题求解效率低。针…

做外贸如何主动开发外贸客户

在外贸业务中&#xff0c;主动开发客户是至关重要的一步&#xff0c;它能够帮助你扩大市场覆盖范围&#xff0c;建立稳定的客户基础。以下是一些有效的策略和方法&#xff0c;可以帮助你更有效地主动开发外贸客户&#xff1a; 明确目标市场&#xff1a;首先&#xff0c;你需要确…

【快速入门】数据库的增删改查与结构讲解

文章的操作都是基于小皮php study的MySQL5.7.26进行演示 what 数据库是能长期存储在计算机内&#xff0c;有组织的&#xff0c;可共享的大量数据的集合。数据库中的数据按照一定的数据模型存储&#xff0c;具有较小的冗余性&#xff0c;较高的独立性和易扩展性&#xff0c;并为…

【docker】Docker开启远程访问

将构建的镜像自动上传到服务器。 需要开放 Docker 的端口&#xff0c;让我们在本地能连接上服务器的 Docker&#xff0c;这样&#xff0c;才能上传构建的镜像给 Docker。 开启远程访问 首先在服务器打开 Docker 的服务文件 vim /usr/lib/systemd/system/docker.service修改…

LiveGBS user/save 逻辑缺陷漏洞复现(CNVD-2023-72138)

0x01 产品简介 LiveGBS是安徽青柿信息科技有限公司研发的一款国标(GB28181)流媒体服务软件,可提供提供用户管理及Web可视化页面管理,开源的前端页面源码;提供设备状态管理,可实时查看设备是否掉线等信息等。 0x02 漏洞概述 LiveGBS user/save 接口处存在逻辑缺陷漏洞,未…

浅论汽车研发项目数字化管理之道

随着汽车行业竞争不断加剧&#xff0c;汽车厂商能否快速、高质地推出贴合市场需求的新车型已经成为车企竞争的重要手段&#xff0c;而汽车研发具备流程复杂、专业领域多、协作难度大、质量要求高等特点&#xff0c;企业如果缺少科学健全的项目管理体系&#xff0c;将会在汽车研…

java-springmvc 01 补充 javaweb 三大组件Servlet,Filter、Listener(源码都是tomcat8.5项目中的)

01.JavaWeb三大组件指的是&#xff1a;Servlet、Filter、Listener,三者提供不同的功能 这三个在springmvc 运用很多 Servlet 01.Servlet接口&#xff1a; public interface Servlet {/*** 初始化方法* 实例化servlet之后&#xff0c;该方法仅调用一次 * init方法必须执行完…

区块链 | 由外部实体导致的 NFT 安全问题

&#x1f98a;原文&#xff1a; Understanding Security Issues in the NFT Ecosystem &#x1f98a;警告&#xff1a; 本文只记录了原文的第 6 节。 1 问题描述 NFT 所指向的数字资产&#xff08;图片、视频等&#xff09;必须是可以访问的&#xff0c;这样 NFT 才具有意义…

flake8,一个超强的 Python 库!

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个超强的 Python 库 - flake8。 Github地址&#xff1a;https://github.com/PyCQA/flake8 Flake8是一个流行的Python库&#xff0c;用于检查代码质量和风格一致性&#xff0c;它集成了PyFlakes、…

powershell 注册全局热键——提升效率小工具

powershell 注册全局热键 01 前言 在处理一些重复工作问题的时候&#xff0c;想搞一个小工具&#xff0c;配合全局快捷键来提高效率。因为是Windows系统&#xff0c;想到C#&#xff0c;但是又不想用VS开发&#xff0c;因为那样不够灵活&#xff0c;没办法随时修改随时用&…

Windows系统下安装Mosquitto的步骤(2)

接前一篇文章&#xff1a;Windows系统下安装Mosquitto的步骤&#xff08;1&#xff09; 本文内容参考&#xff1a; Windows10上安装Mosquitto的步骤(win10、win11 安装mqtt) - IPS99技术分享 MQTT&#xff1a;windows环境下配置MQTT服务器&#xff08;mosquitto&#xff09;_…

2024.阳光能源追光计划暨大陆考察团交流分享会

近日大陆考察团抵达香港&#xff0c;受到了本司热情接待和安排。公司于4月27日下午举办了阳光能源追光计划主题交流会。 会上公司营销部总监张超&#xff0c;分享了阳光能源近几年的能源发展之路及公司新推出的追光计划&#xff0c;得到了大陆考察交流团团长杨国均先生的高度赞…

Vue.js课后练习(登录注册和大小比较)

第一题 请编写登录页面和注册页面&#xff0c;通过动态组件实现动态切换页面中显示的组件&#xff0c;效果如图1和图2所示。 图1 登录页面 图2 注册页面 代码&#xff1a; my.vue代码: <template>登录 </template><script setup> </script><st…