基本的图像处理操作

news2024/11/29 4:53:23

Python中的图像处理基础

3a89351f6202bfcf02c578d22634acb1.jpeg

图像处理是一种对图像执行操作以从中提取信息或增强图像的方法。图像处理是当今计算机视觉中最热门的话题之一,因为它被认为是计算机视觉、OCR 和其他相机相关领域的基础。

让我们开始实际处理图像。

提示

只是在这里向你展示一个代码片段,但在本文的末尾,提供了的git 存储库,你可以在其中找到此文中的所有代码。你可以直接复制粘贴!

让我们开始吧!

如何读取图像?

你可以通过 3 种类型读取图像。

  1. 使用 open-cv

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。OpenCV 旨在为计算机视觉应用程序提供通用基础架构,并加速机器感知在商业产品中的使用。

这是读取图像的最常用方法。

import cv2
#read image by opencv
img_1 = cv2.imread(r"C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg")
cv2.imshow("img",img_1)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2 读取图像

运行代码后,将打开一个单独的窗口,你将看到你的图像。

  • Waitley 代表你希望在屏幕上停留多长时间的时间。

  • destroyAllWindows() 是用于在时间结束后删除图像的命令。

  • 输出图像是数组的形式。

  1. Pillow 库

PIL(Python Imaging Library)为 Python 添加了许多图像处理功能。Pillow 是 PIL 的一个分支,增加了一些用户友好的特性。

# read image by PIL

from PIL import Image 
# creating a object
img = Image.open(r"C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg") 
img.show()
type(img)

输出:

377acfd0c6b5c465748f63b7ff72f97d.png
  • 输出格式为JPG格式[PIL.JpegImagePlugin.JpegImageFile]

  1. matplotlib库

matplotlib 库中的图像模块用于在 Python 中处理图像。

#read image by matplotlib
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from matplotlib.pyplot import figure
figure(figsize=(4, 3), dpi=80)
img = mpimg.imread(r'C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg')
imgplot = plt.imshow(img)
plt.show()

输出:

d9453281f54927d7f2467519593dfa34.png
  • 输出图像是数组的形式。

使图像模糊

  1. 高斯模糊

使图像模糊的最简单方法是使用高斯滤波器。高斯模糊只是一种借助高斯函数模糊图像的方法。模糊图像使边缘更牢固。

#gaussian blurr
import cv2
img_1 = cv2.imread(r"C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg")
blur = cv2.blur(img_1,(5,5))
cv2.imshow("img",blur)
cv2.waitKey(0)
cv2.destroyAllWindows()
bdd34cda77c1cce20e7fe4f17358cfaa.png
  1. 内核模糊

你可以自定义模糊率和其他内容。

#Kernel blurr
import numpy as np
kernel = np.ones((5,5),np.float32)/25
dst = cv2.filter2D(img_1,-1,kernel)
cv2.imshow("img",dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
  1. 中值模糊

##median blurr
img_1 = cv2.imread(r"C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg")
median = cv2.medianBlur(img_1,17)
cv2.imshow("img",median)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 这些是你可以使图像模糊并更改模糊强度的方法。

将图像转换为黑白

  • 我们以 RGB 三种颜色读取图像。很多时候我们想使用它的基础版本,比如黑白。

######converting image into black and white

import cv2
  
img_1 = cv2.imread(r"C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg")
grayImage = cv2.cvtColor(img_1, cv2.COLOR_BGR2GRAY)
(thresh, blackAndWhiteImage) = cv2.threshold(grayImage, 127, 255, cv2.THRESH_BINARY)
# cv2.imshow('Black white image', blackAndWhiteImage)
cv2.imshow('Gray image', grayImage)
  
cv2.waitKey(0)
cv2.destroyAllWindows()
636d6d80d09124b74208f48690f71f41.png
  • 你可以通过上面的代码改变灰度的强度。

裁剪图像

#Cropping Image
img_1 = cv2.imread(r"C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg")
x,y,c = img_1.shape
new_img = img_1[50:580, 100:300]  
cv2.imshow('Gray image', new_img)  
cv2.waitKey(0)
cv2.destroyAllWindows()
a6309afd5bcf11772417040eb2eb9f56.png
  • 裁剪非常简单,因为你只需要提供从哪里开始和从哪里结束的坐标。

  • 你可以使用 cv2.imwrite 存储裁剪的图像以供进一步处理。

编辑应用程序等对比效果

  • 对比度决定图像中阴影的数量。

  • 在图像特征的灰度基础上进行区分,使用对比度。

######contrast 
from PIL import Image, ImageEnhance
  
# Opening Image
im = Image.open(r"C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg")
  
# Creating object of Contrast class
im3 = ImageEnhance.Contrast(im)
  
# showing resultant image
im3.enhance(4.9).show()
9346ffba92e3065ed2fe421176d31552.png

锐化图像

  • 很多时候,由于相机镜头没有对焦,图像会变得模糊。锐化效果锐化边缘以获得更好的外观。

#sharpning an image 
import numpy as np
import cv2 
img1 = cv2.imread(r'C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg',1)
# Creating our sharpening filter
filter = np.array([[-1, -1, -1], [-1, 9, -1], [-1, -1, -1]])
# Applying cv2.filter2D function on our Cybertruck image
sharpen_img_1=cv2.filter2D(img1,-1,filter)
sharpen_img_1 = cv2. resize(sharpen_img_1, (960, 840))
cv2.imshow("sharp",sharpen_img_1)
cv2.waitKey(0)
cv2.destroyAllWindows()
06c13706e38210d126bf84792cd26696.png

压纹滤镜

import cv2
img1 = cv2.imread(r'C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg',1)
(b,g,r)=cv2.split(img1)
r_new = r*0.393 + g*0.769 + b*0.189
g_new = r*0.349 + g*0.686 + b*0.168
b_new = r*0.272 + g*0.534 + b*0.131
img_new=cv2.merge([b_new, g_new, r_new])
cv2.imshow("img",img_new)
cv2.waitKey(0)
cv2.destroyAllWindows()
b1b4fc8739fca2d30b049e7ace3d774a.png

小提示:内核中这些不同值的组合是生成你当前在 Instagram、Snapchat 和其他社交媒体上使用的许多滤镜的基础。

以任意角度旋转图像

  • 通过这种简单的 cv2 方法,可以实现所有图像数据增强,如旋转、翻转、垂直和水平。

# Creating our emboss filter
img_1 = cv2.imread(r'C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg',1)
filter = np.array([[0,1,0],[0,0,0],[0,-1,0]])
# Applying cv2.filter2D function on our Cybertruck image
emboss_img_1=cv2.filter2D(img_1,-1,filter)
emboss_img_1=emboss_img_1+128
emboss_img_1 = cv2. resize(emboss_img_1, (660, 640))

cv2.imshow("dsnfj",emboss_img_1)
cv2.waitKey(0)
cv2.destroyAllWindows()
7aedd8baa97888deb7149532af71dffb.png 64fd08898079c924eebd755849eb5c1d.png 5847639bc2a5df463af529acae6106d5.png

缩小/调整图像大小

  • 对于更大尺寸的图像,数据要求更多。所以缩小有时可以提高它的可见性和功能。

# import the Python Image
# processing Library
from PIL import Image
 
# Giving The Original image Directory
# Specified
Original_Image = Image.open(r"C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg")
 
# Rotate Image By 180 Degree
rotated_image1 = Original_Image.rotate(180)
 
# This is Alternative Syntax To Rotate
# The Image
rotated_image2 = Original_Image.transpose(Image.ROTATE_90)
 
# This Will Rotate Image By 60 Degree
rotated_image3 = Original_Image.rotate(60)
 
rotated_image1.show()
rotated_image2.show()
rotated_image3.show()

在图像上写文字

  • 水印或任何其他文本是图像中的重要因素之一。下面的程序将让你了解如何在图像上编写文本。

###shrink image
img_1 = cv2.imread(r'C:\Users\ChinmayB\Downloads\pexels-photo-8115603.jpeg',1)
img_shrinked = cv2.resize(img_1,(150, 150), interpolation = cv2.INTER_AREA)
cv2.imshow('img',img_shrinked)
cv2.waitKey(0)
cv2.destroyAllWindows()
289227fcd304cf1439b8476b8a4d6108.png

这些是我觉得有趣的图像处理操作。这些所有操作都基于许多图像编辑应用程序。你可以通过结合所有技术来创建相同的应用程序。

GitHub 链接:https://github.com/ChinmayBH/Exploring-Vision/blob/main/Image%20processing%201.ipynb

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

82d6e2cd15933537c5b5a85d5182b44c.jpeg

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

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

相关文章

MySQL数据库的事务

文章目录一、事务是什么?二、事务的四大特征原子性一致性持久性隔离性MySQL的四个隔离级别一、事务是什么? 数据库的事务是一种机制,一个操作序列,里面包含了一组数组库操作命令 事务把所有的命令作为一个整体一起向系统提交或撤…

世界杯直播背后的服务器(云计算体系)

世界杯直播背后的服务器 世界杯直播过程中,各大网络平台流媒体app上最大的变化毫无疑问就是零延迟。以前球迷看球是都会发现,网络直播的球赛会比电视播出的球赛延迟40s左右。如果群里有个看电视的兄弟兄弟每个进球他都能提前40秒预告给你,那么…

MySQL 索引

目录 一、索引的概念 二、索引的作用 三、索引的缺点 四、创建索引的原则依据 五、索引的分类和创建 1、普通索引 2、唯一索引 3、主键索引 4、组合索引(单列索引与多列索引) 5、全文索引(FULLTEXT) 六、查看索引 七、…

SpringBoot SpringBoot 原理篇 1 自动配置 1.18 自动配置原理

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 原理篇 文章目录SpringBootSpringBoot 原理篇1 自动配置1.18 自动配置原理1.18.1 变更自动配置1.18.2 小结1.18.3 总结1 自…

校园网站毕业设计,校园网站设计与实现,校园网站论文作品参考

功能清单 【后台管理员功能】 关于我们设置:设置学校简介、联系我们、加入我们、法律声明、学校详情 广告管理:设置小程序首页轮播图广告和链接 留言列表:所有用户留言信息列表,支持删除 会员列表:查看所有注册会员信…

飞桨模型部署至docker并使用FastAPI调用(五)-WordPress展示页面

文章首发及后续更新:https://mwhls.top/4092.html,无图/无目录/格式错误/更多相关请至首发页查看。 新的更新内容请到mwhls.top查看。 欢迎提出任何疑问及批评,非常感谢! 飞桨模型部署至docker并使用FastAPI调用目录框架搭建 测试…

关于图的学习

一、图的定义 图G由顶点集V和边集E组成,记为G (V, E),其中V(G)表示图G中顶点的有限非空集;E(G)表示图G中顶点之间的关系(边)集合。若V { v1,v2,...,vn },则用 | V | 表示图G中顶点…

PyQt5可视化编程-布局管理

在一个GUI程序里,布局是一个很重要的方面。布局就是如何管理应用中的元素和窗口。有两种方式可以搞定:绝对定位和PyQt5的layout类 1.绝对定位: 每个程序都是以像素为单位区分元素的位置,衡量元素的大小。所以我们完全可以使用绝对定位搞定每个…

【Linux】网络编程基础

文章目录网络基础1.网络与操作系统的关系2.计算机网络发展3.协议3.1协议分层3.2OS七层模型3.3TCP/IP五层模型4.网络传输基本流程4.1数据包的封装和分用4.1.1报头和有效载荷4.2局域网的两台主机通信4.3跨网络的两台主机通信5.IP地址和MAC地址5.1IP地址5.2MAC地址5.3IP地址和MAC地…

XSCTF联合招新【真是阳间题】(MSIC+Crypto)

文章目录XSCTF联合招新【真是阳间题】(MSICCrypto)Step1:查看文件step2:操作流程关于Base64,Base32,Base16进制的区别方法:Base64:Base32:Base16:XSCTF联合招新【真是阳间题】(MSICC…

控制瑞芯微平台GPIO(输入、输出、电平读取)

控制瑞芯微平台GPIO(输入、输出)GPIO编号计算控制步骤输出高电平读取电平GPIO编号计算 GPIO编号 BANK * 32 GPIO_PIN GPION_MP N * 32 8 * (M -1) P 示例:GPIO7_C2 7 X 32 8 X (3-1) 2 242 GPIO2_A1 2 X 32 8 X (1-1) 1 73 A对…

IO流~File

File File类概述和构造方法 File:它是文件和目录路径名的抽象表示 文件和目录是可以通过File封装成对象的对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以是存在的,也可以是不存在的。将来是要通…

【PyTorch深度强化学习】DDPG算法的讲解及实战(超详细 附源码)

需要源码请点赞关注收藏后评论区留言留下QQ~~~ 一、DDPG背景及简介 在动作离散的强化学习任务中,通常可以遍历所有的动作来计算动作值函数q(s,a)q(s,a),从而得到最优动作值函数q∗(s,a)q∗(s,a) 。但在大规模连续动作空间中,遍历所有动作是不…

Css3 2D转换 2D转换之移动tranlate

转换(transform)是css3中具有颠覆性的特征之一,可以实现元素的位移、旋转、缩放等效果。 转换你可以简单理解为变形。 移动:translate旋转:rotate缩放:scale 2D转换是改变标签在二维平面上的位置和形状的…

Spring - InstantiationAwareBeanPostProcessor 扩展接口

文章目录Preorg.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorInstantiationAwareBeanPostProcessor 注册过程源码分析postProcessBeforeInstantiation的执行时机源码解析使用场景 : 创建代理类Pre Spring Boot - 扩展接口一览 org.s…

AWS Academy LMS 考勤 - 教师

AWS Academy LMS 考勤 - 教师 在 AWS Academy LMS 教材使用 - 教师 说明了如何使用 AWS Academy LMS 中所提供的线上素材,而开始上课后,教师必须要去了解学生对于教材的实际使用状况,在这里介绍如何查看学生在各模块知…

Jsoup爬虫入门实战

一、Jsoup介绍 jsoup 是一款基于 Java 的HTML解析器,它提供了一套非常省力的API,不但能直接解析某个URL地址、HTML文本内容,而且还能通过类似于DOM、CSS或者jQuery的方法来操作数据,所以 jsoup 也可以被当做爬虫工具使用。 相关…

进程通信(2) ----- 信号

文章目录一、实验目的二、实验内容三、实验要求四、实验步骤及操作五、程序源码1. 信号发送 fkill.c2. 信号监控 mysignal.c一、实验目的 1.了解进程通信间的信号机制 2.掌握进程通信间的信号编程模型 二、实验内容 信号是通信量最小的一种进程间通信形式,也用于…

【Gradle】三、深入了解Gradle

这里写目录标题一、 Gradle项目的生命周期Initialization 阶段Configuration 阶段:Execution 阶段:二、settings.gradle 文件三、Task1、 案例四、Dependencies1、依赖的分类2、依赖的下载3、依赖的类型4、api与implementation的区别5、依赖冲突及解决方…

(二) Docker安装

Docker安装一、前提二、安装三、设置阿里云镜像加速四、分析Run底层原理五、Docker会比VM虚拟机快的原因一、前提 CentOS 仅发行版本中的内核支持 Docker。Docker 运行在CentOS 7 (64-bit)上, 要求系统为64位、Linux系统内核版本为 3.8以上,这里选用Cen…