图像处理的一些操作(1)

图像处理

  • 1.安装PIL,skimage库
    • 1.1导入skimage库中的oi模块和data模块
  • 2.读取图像文件
    • 2.1读取图像文件
    • 2.2 以灰度模式读取图像
    • 2.3 查看示例图像的目录路径
    • 2.4 读取chelsea图片
    • 2.5 加载示例图片并保存
    • 2.6 获得加载图片的信息
      • 2.6.1 输出图片类型
      • 2.6.2 输出图片尺寸
      • 2.6.3 输出图片宽度
      • 2.6.4 输出图片高度
      • 2.6.5 输出图片通道数
      • 2.6.6 输出图片总像素个数
      • 2.6.7 输出图片最大像素值
      • 2.6.8 输出图片最小像素值
      • 2.6.9 输出图片所有像素值平均值
  • 3.使用切片操作提取通道
    • 3.1提取红色通道
    • 3.2提取绿色通道
    • 3.3提取蓝色通道
  • 4.给图片添加椒盐噪声
    • 4.1提升图像维度
    • 4.2 添加随机噪声
    • 4.3显示修改后的图像
  • 5. 给图片去掉椒盐噪声
    • 5.1高斯模糊
    • 5.3 中值滤波
    • 5.2图像切片
    • 5.3特定区域像素值
      • 5.3.1计算特定区域像素值
  • 6.二值化图像
    • 6.1导入color模块
    • 6.2读取图像 转成灰度
    • 6.3遍历循环
  • 7.改变通道值
    • 7.1 [0, 255, 0]
    • 7.2 [6, 25, 60]
    • 7.3 [25, 25, 25]
  • 8. 图像归一化
    • 8.1导入模块
    • 8.2RGB图像转灰度图像
    • 8.3计算灰度图像的最小值和最大值
    • 8.4打印图像
    • 8.5创建两个子图

1.安装PIL,skimage库

1.1导入skimage库中的oi模块和data模块

io模块提供了用于读取和保存图像的函数,而data模块包含了一些实力图像供我们使用

from skimage import io,data

2.读取图像文件

2.1读取图像文件

使用io.Imread函数读取该图片,并加载到名为img的变量中。

img=io.imread(r"C:\Users\song\Desktop\1.jpg")
io.imshow(img)
io.show()

运行结果:
在这里插入图片描述

2.2 以灰度模式读取图像

使用io.Imread函数以灰度模式读取该图片,并加载到名为img的变量中。

img=io.imread(r"C:\Users\song\Desktop\1.jpg",as_gray=True)
io.imshow(img)

运行结果:
在这里插入图片描述

2.3 查看示例图像的目录路径

data_dir 是 skimage 库中的一个变量,它存储了示例图像的目录路径。通常情况下,这个路径指向 skimage 库内部的示例图像文件夹。这个文件夹包含了一些常用的示例图像,供用户在实验和测试时使用。

from skimage import data_dir
print(data_dir)

运行结果:
在这里插入图片描述

2.4 读取chelsea图片

使用了skimage 库中的data 和idata dir 、模块。首先,通过data.chelsea()方法读取了 Lena 图片,然后通过io.imread()方法结合datadir 路径读取了同样的 Lena 图片。这两种方法都用于加载 Lena 图片,只是一种是直接通过 data 模块获取示例图片,另一种是通过拼接路径的方式获取示例图片。

from skimage import data_dir,data,io
img1=data.chelsea() # 读取chelsea图片
img2=io.imread(data_dir+'/chelsea.png') # 读取chelsea图片

2.5 加载示例图片并保存

使用skimage库中的io.save()函数将加载的示例图像img保存到指定路径(imsave()函数会将图像以PNG格式保存到指定路径)
io.show()函数显示先前用io.imshow()加载的图像

from skimage import io,data
img=data.chelsea()
io.imshow(img)
io.show()
io.imsave(r"E:\工坊\chelsea.png",img)

运行结果:
在这里插入图片描述

2.6 获得加载图片的信息

用于获取图片的属性和统计信息

from skimage import io,data
img=data.chelsea()
io.imshow(img)

2.6.1 输出图片类型

输出<class ‘numpy.ndarray’>

print(type(img)) # 显示类型

运行结果:
在这里插入图片描述

2.6.2 输出图片尺寸

示例图像:(高度,宽度,通道数)
彩色图像:3(红、绿、蓝)

print(img.shape) # 显示尺寸

运行结果:
(300,451,3)

2.6.3 输出图片宽度

print(img.shape[0]) # 图片宽度

运行结果:
300

2.6.4 输出图片高度

print(img.shape[1]) # 图片高度

运行结果:
451

2.6.5 输出图片通道数

print(img.shape[2]) # 图片通道数

运行结果:
3

2.6.6 输出图片总像素个数

即宽度乘通道数

print(img.size) # 显示总像素个数

运行结果:
405900

2.6.7 输出图片最大像素值

print(img.max()) # 显示最大像素值

运行结果:
231

2.6.8 输出图片最小像素值

print(img.min()) # 显示最小像素值

运行结果:
0

2.6.9 输出图片所有像素值平均值

print(img.mean()) #显示像素平均值

运行结果:
115.30514166050752

3.使用切片操作提取通道

在numpy数组中,索引[0]表示红色通道,索引[1]表示绿色通道,索引[2]表示蓝色通道

3.1提取红色通道

red_channel = img[:, :, 0]
io.imshow(red_channel)
io.show()

运行结果:
在这里插入图片描述

3.2提取绿色通道

green_channel = img[:, :, 1]
io.imshow(green_channel)
io.show()

运行结果:
在这里插入图片描述

3.3提取蓝色通道

blue_channel = img[:, :, 2]
io.imshow(blue_channel)
io.show()

运行结果:
在这里插入图片描述

4.给图片添加椒盐噪声

4.1提升图像维度

rows代表行数,cols代表列数字,dims代表颜色通道数

rows,cols,dims=img.shape

4.2 添加随机噪声

对加载的图片进行随机位置(x,y)设置为白色的操作。

for i in range(5000): #循环5000次x = np.random.randint(0,rows) y = np.random.randint(0,cols)img[x,y,:]=255

4.3显示修改后的图像

io.imshow(img)

运行结果:
在这里插入图片描述

5. 给图片去掉椒盐噪声

5.1高斯模糊

import cv2# 读取图像
image = cv2.imread(r"C:\Users\song\Desktop\2.jpg")# 高斯模糊
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)# 显示处理后的图像
cv2.imshow('Blurred Image', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:
在这里插入图片描述

5.3 中值滤波

import cv2# 读取图像
image = cv2.imread(r"C:\Users\song\Desktop\2.jpg")# 中值滤波
blurred_image = cv2.medianBlur(image, 5)# 显示处理后的图像
cv2.imshow("Median Blurred Image", blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:
在这里插入图片描述

5.2图像切片

加载图像

from skimage import io, data
img = io.imread(r"C:\Users\song\Desktop\3.jpg")
io.imshow(img)

运行结果:
在这里插入图片描述
显示图像指定区域

from skimage import io,data
img = io.imread(r"C:\Users\song\Desktop\3.jpg")
song = img[300:600,130:350,:]
io.imshow(song)

运行结果:
在这里插入图片描述

5.3特定区域像素值

5.3.1计算特定区域像素值

通过两层循环遍历图像的每个像素位置,计算[:100, :50]内像素值的总和。

height, width = img.shape[0], img.shape[1]
for i in range(height):for j in range(width):region_sum = img[:100, :50].sum()print(region_sum)  

运行结果:
在这里插入图片描述

6.二值化图像

6.1导入color模块

color模块

from skimage import color

6.2读取图像 转成灰度

img_gray=color.rgb2gray(img)
rows,cols=img_gray.shape

6.3遍历循环

for i in range(rows):
for j in range(cols):if (img_gray[i,j]<=0.5):img_gray[i,j]=0else:img_gray[i,j]=1
io.imshow(img_gray)

运行结果:
在这里插入图片描述

7.改变通道值

7.1 [0, 255, 0]

找到原始图像中红色通道数大于170的像素,并将这些像素的颜色修改成绿色。

from skimage import color
img = io.imread(r"C:\Users\song\Desktop\1.jpg")
reddish = img[:, :, 0] >170
img[reddish] = [0, 255, 0]
io.imshow(img)

运行结果:
在这里插入图片描述

7.2 [6, 25, 60]

找到原始图像中红色通道数大于170的像素,并将这些像素的颜色修改成深蓝色。
运行结果:
在这里插入图片描述

7.3 [25, 25, 25]

找到原始图像中红色通道数大于170的像素,并将这些像素的颜色修改成灰色。
运行结果:
在这里插入图片描述

8. 图像归一化

8.1导入模块

从skimage库中导入io和color模块,同时从matplotlib.pyplot中导入plt模块

from skimage import io, color
import matplotlib.pyplot as plt

8.2RGB图像转灰度图像

img = io.imread(r"C:\Users\song\Desktop\1.jpg")
gray = color.rgb2gray(img)

8.3计算灰度图像的最小值和最大值

mn = gray.min()
mx = gray.max()
norm = (gray - mn) / (mx - mn)

8.4打印图像

print('归一化前:')
print(gray)
print('归一化后:')
print(norm)

8.5创建两个子图

分别显示归一化前和归一化后的灰度图像
运行结果:
在这里插入图片描述

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

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

相关文章

idea生成双击可执行jar包

我这里是一个生成xmind,解析sql的一个main方法,可以通过配置文件来修改有哪些类会执行 我们经常会写一个处理文件的main方法,使用时再去寻找,入入会比较麻烦,这里就可以把我们写过的main方法打成jar包,放到指定的目录来处理文件并生成想要的结果 1.写出我们自己的main方法,本地…

Reactor模型详解

目录 1.概述 2.Single Reactor 3.muduo库的Multiple Reactors模型如下 1.概述 维基百科对Reactor模型的解释 The reactor design pattern is an event handling pattern for handling service requests delivered concurrently to a service handler by one or more inputs.…

《ElementUI 基础知识》el-tabs header 监听鼠标中键滚动时左右滑动(ElementPlus同样适用)

前言 收到需求&#xff0c;可监听 el-tabs 头在鼠标 hover 时。滑动鼠标中键&#xff0c;可左右滑动&#xff01; 效果 鼠标中键上下滑动时&#xff1b;向上滑&#xff0c;向左移动&#xff1b;向下滑&#xff0c;向右移动&#xff1b; 实现 代码56 - 60行&#xff0c;添加…

服务器IP选择

可以去https://ip.ping0.cc/查看IP的具体情况 1.IP位置--如果是国内用&#xff0c;国外服务器的话建议选择日本&#xff0c;香港这些比较好&#xff0c;因为它们离这里近&#xff0c;一般延时低&#xff08;在没有绕一圈的情况下&#xff09;。 不过GPT的话屏蔽了香港IP 2. 企…

【数学建模】矩阵微分方程

一、说明 我相信你们中的许多人都熟悉微分方程&#xff0c;或者至少知道它们。微分方程是数学中最重要的概念之一&#xff0c;也许最著名的微分方程是布莱克-斯科尔斯方程&#xff0c;它控制着任何股票价格。 ​​ 股票价格的布莱克-斯科尔斯模型 微分方程可以由数学中的许多…

【Python项目】基于DJANGO的【医院体检预约系统】

技术简介&#xff1a;使用Python技术、DJANGO框架、MYSQL数据库等实现。 系统简介&#xff1a;系统采用了在线预约和挂号的方式&#xff0c;用户可以通过网站进行预约和挂号操作。同时&#xff0c;系统还提供了医生的详细介绍和评价&#xff0c;方便用户选择医生。 研究背景&a…

Linux系统编程--信号与管道

1、信号与管道是什么&#xff1f; 首先了解信号与管道的意义&#xff0c;我们需要了解Linux系统中进程之间是如何通信的。Linux操作系统下&#xff0c;以进程为单位来分配或者管理资源&#xff0c;进程之间不能直接访问资源&#xff0c;因此&#xff0c;要求进程间的资源和信息…

word中取消分页符或分段符前后的空格

在Word中&#xff0c;有时候&#xff0c;我们添加分页符后&#xff0c;从分页符后面的文字就全部掉到了下一页&#xff0c;那么如何避免呢&#xff1f; 选择word选项--高级&#xff0c;然后下滑到下面&#xff0c;将“取消分页符或分段符前后的空格”选中&#xff0c;如下图所…

【Linux】进程间通信 - 管道

文章目录 1. 进程间通信介绍1.1 进程间通信目的1.2 进程间通信发展1.3 进程间通信分类 2. 管道2.1 什么是管道2.2 匿名管道2.3 用 fork 来共享管道原理2.4 站在文件描述符角度 - 深入理解管道2.5 站在内核角度 - 管道本质2.6 管道读写规则2.7 管道特点 3. 命名管道3.1 匿名管道…

C 408—《数据结构》图、查找、排序专题考点(含解析)

目录 Δ前言 六、图 6.1 图的基本概念 6.2 图的存储及基本操作 6.3 图的遍历 6.4 图的应用 七、查找 7.2 顺序查找和折半查找 7.3 树型查找 7.4 B树和B树 7.5 散列表 八、排序 8.2 插入排序 8.3 交换排序 8.4 选择排序 8.5 归并排序和基数排序 8.6 各种内部排序算法的比较及…

Meta Llama 3 使用 Hugging Face 和 PyTorch 优化 CPU 推理

原文地址&#xff1a;meta-llama-3-optimized-cpu-inference-with-hugging-face-and-pytorch 了解在 CPU 上部署 Meta* Llama 3 时如何减少模型延迟 2024 年 4 月 19 日 万众期待的 Meta 第三代 Llama 发布了&#xff0c;我想确保你知道如何以最佳方式部署这个最先进的&…

堆栈打印跟踪Activity的启动过程(基于Android10.0.0-r41),framework修改,去除第三方app的倒计时页面

文章目录 堆栈打印跟踪Activity的启动过程(基于Android10.0.0-r41)&#xff0c;framework修改&#xff0c;去除第三方app的倒计时页面1.打印异常堆栈2.去除第三方app的倒计时页面3.模拟点击事件跳过首页进入主页 堆栈打印跟踪Activity的启动过程(基于Android10.0.0-r41)&#x…

UNI-APP_拨打电话权限如何去掉,访问文件权限关闭

uniapp上架过程中一直提示&#xff1a;允许“app名”拨打电话和管理通话吗&#xff1f; uniapp配置文件&#xff1a;manifest.json “permissionPhoneState” : {“request” : “none”//拨打电话权限关闭 }, “permissionExternalStorage” : {“request” : “none”//访…

深度解析Java 9核心新特性

码到三十五 &#xff1a; 个人主页 < 免责声明 > 避免对文章进行过度解读&#xff0c;因为每个人的知识结构和认知背景都不同&#xff0c;没有一种通用的解决方案。对于文章观点&#xff0c;不必急于评判。融入其中&#xff0c;审视自我&#xff0c;尝试从旁观者角度认清…

ruoyi漏洞总结

若依识别 黑若依 :icon hash"-1231872293 绿若依 :icon hash"706913071” body" 请通过前端地址访 " body" 认证失败&#xff0c;无法访问系统资源 " 如果页面访问显示不正常&#xff0c;可添加默认访问路径尝试是否显示正常 /login?redi…

.net6 webapi 部署到IIS

一、发布.net6 webapi 项目 1.1 visual studio 2022右键发布到文件夹。 二、增加IIS容器 2.1 控制面板 2.2 启用或关闭Windows功能 3.3 勾选Internet Information Services,点击确定进行安装 三、部署webapi到IIS 3.1 安装 dotnet-hosting-6.0.29-win.exe 3.2 创建应用…

基于高德 API 的自动获取气候数据的 Python 脚本

文章目录 高德申请 Key脚本介绍运行结果示例 源代码&#xff1a; https://github.com/ma0513207162/PyPrecip。pyprecip\reading\read_api.py 路径下。 项目介绍&#xff1a;PyPrecip 是一个专注于气候数据处理的 Python 库&#xff0c;旨在为用户提供方便、高效的气候数据处理…

思考题 —— Windows 登录密码

1.windows登录的明文密码&#xff0c;存储过程是怎么样的&#xff1f;密文存放在哪个文件下&#xff1f;该文件是否可以打开&#xff0c;并且查看到密文&#xff1f; 系统通过保存密码的哈希值来确保安全性&#xff0c;进行加密存储的方法通常为NTLM或Kerberos身份认证协议。该…

2024年第七届大数据技术国际会议(ICBDT 2024)即将召开!

2024年第七届大数据技术国际会议&#xff08;ICBDT 2024&#xff09;将于2024年9月20-22日在中国杭州的浙江工商大学举行。数据驱动未来&#xff0c;技术引领潮流。从数据挖掘算法的优化&#xff0c;到数据处理速度的提升&#xff0c;再到数据安全与隐私保护的进步&#xff0c;…

配电室智能巡检机器人

近年来&#xff0c;生产过程高度自动化&#xff0c;各工矿企业关键场所需定期巡检维护。但目前巡检主要靠人工&#xff0c;既耗时费力效率又低&#xff0c;且受环境等因素影响&#xff0c;巡检难以全面规范&#xff0c;隐患或问题易被忽视。在此情况下&#xff0c;如何利用现有…