Python图像处理基本操作[通俗易懂]

Python图像处理基本操作[通俗易懂]在Python中进行图像处理可以使用的库有很多,本文主要介绍下面三个:OpenCV、PIL、skimage。其中,OpenCV是图像处理中最强大的一个库,它的源代码是由C\C++写成的,所以原版的OpenCV可以与C、C++无缝结合。Python版的OpenCV主要依赖于cv2这个包来实现。Python里面自带一个PIL(pythonimageslibrary),但这个库现在已经停止更新了,所以使用Pillow,它是由PIL发展而来的

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

在Python中进行图像处理可以使用的库有很多,本文主要介绍下面三个:

  • OpenCV(Open Source Computer Vision Library)
  • PIL(Python Imaging Library)
  • skimage(scikit-image)

*如下代码的实验环境为Jupyter Notebook.

欢迎关注白马负金羁的博客 http://blog.csdn.net/baimafujinji,为保证公式、图表得以正确显示,强烈建议你从该地址上查看原版博文。本博客主要关注方向包括:数字图像处理、算法设计与分析、数据结构、机器学习、数据挖掘、统计分析方法、自然语言处理。


1. OpenCV

OpenCV是图像处理中最强大的一个库,它的源代码是由C\C++写成的,所以原版的OpenCV可以与C、C++无缝结合。Python版的OpenCV主要依赖于cv2这个包来实现。

1.1  imread()

import cv2
import numpy as np

#读入图片:默认彩色图,cv2.IMREAD_GRAYSCALE灰度图,cv2.IMREAD_UNCHANGED包含alpha通道
img = cv2.imread('Lena.png')
print(img.shape)
print(type(img))

上述代码的执行结果如下:

(512, 512, 3)
<class 'numpy.ndarray'>

此时,被读入的图像以ndarray格式存在,取值范围是 [0, 255]。

1.2  imshow()

cv2.imshow('Lena',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

函数imshow()用于显示图像,但只使用它并不会得到任何结果,必须结合后面的waitKey(delay),参数delay表示延迟多少毫秒。默认情况为0。当delay≤0,可以理解为延迟无穷大毫秒。调用destroyAllWindows()函数可以释放由 OpenCV创建的所有窗口。注意上面三条语句必须写在Jupyter notebook中的同一Cell里,然后按任意键,系统会关闭图像显示窗口。

1.3  imwrite()

cv2.imwrite('lena.jpg',img)

函数imwrite()用于存储图像,第一个参数是file name,第二个参数是要存储的图像对象。

 

参考链接【点击链接】

欢迎关注白马负金羁的博客 http://blog.csdn.net/baimafujinji,为保证公式、图表得以正确显示,强烈建议你从该地址上查看原版博文。本博客主要关注方向包括:数字图像处理、算法设计与分析、数据结构、机器学习、数据挖掘、统计分析方法、自然语言处理。


2. PIL

Python里面自带一个PIL(python images library), 但这个库现在已经停止更新了,所以使用Pillow, 它是由PIL发展而来的。

1.1  open()

from PIL import Image
import numpy as np

img = Image.open('Lena.png')
print(img.size)
print(img.mode)
print(type(img))

上述代码的执行结果如下:

(512, 512)
RGB
<class 'PIL.PngImagePlugin.PngImageFile'>

1.2 show()

下面的代码可以用来显示图像,程序会弹出一个单独的图像窗口。

img.show()

除此之外,还可以使用matplotlib来绘制图像,它是一个专业绘图的库,相当于matlab中的plot,可以设置多个figure,设置figure的标题,甚至可以使用subplot在一个figure中显示多张图片。

import matplotlib.pyplot as plt
%matplotlib inline

plt.imshow(img)

inline一句的作用是在Jupyter Notebook的网页中直接绘图,即不会单独弹出绘图窗口,上述代码的执行结果如下:

Python图像处理基本操作[通俗易懂]

如果不希望显示坐标轴,则可以使用下面的代码:

plt.axis('off')
plt.imshow(img)

下面的代码演示了显示多行、多列图像的方法,注意其中显示灰度图像的语法。

fig=plt.figure(figsize=(28, 28))
columns = 5
rows = 5
for i in range(1, columns*rows +1):
    img = test_only_success_adv[650+i].reshape(28,28)+0.5
    fig.add_subplot(rows, columns, i)
    plt.imshow(img, cmap='gray')
    plt.axis('off')

代码执行结果如下:

Python图像处理基本操作[通俗易懂]

1.3  save()

图像保存可以使用:

img.save('lena2.jpg')

如果要把以ndarray格式存储的矩阵保存成图像,则需要使用:

im = Image.fromarray(np.uint8(data_jsma_0*255))
im.save("000.png")

 

参考链接【点击链接】

欢迎关注白马负金羁的博客 http://blog.csdn.net/baimafujinji,为保证公式、图表得以正确显示,强烈建议你从该地址上查看原版博文。本博客主要关注方向包括:数字图像处理、算法设计与分析、数据结构、机器学习、数据挖掘、统计分析方法、自然语言处理。


3. skimage

 

1.1  imread()

参考示例代码:

from skimage import io
import numpy as np

img = io.imread('Lena.png')
print(img.shape) # numpy矩阵,(h,w,c)

print(type(img))

上述代码执行结果如下:

(512, 512, 3)
<class 'numpy.ndarray'>

被读入的图像以ndarray格式存在。

与之前类似,io.imshow() 和 io.imsave() 分别用于显示和存储图像。

1.2  img_as_ubyte()

该函数的作用是convert an image to 8-bit unsigned integer format,也就是把图像像素灰度的取值范围转化到0~255之间的整数。

例如,

print(np.max(adv_test_cw0[0]))
print(np.min(adv_test_cw0[0]))

byte_adv_test_cw0 = img_as_ubyte(adv_test_cw0)

print(np.max(byte_adv_test_cw0[0]))
print(np.min(byte_adv_test_cw0[0]))

上述代码的执行结果如下:

0.9997719
0.00054621696

255
0

 

参考链接【点击链接】

 

欢迎关注白马负金羁的博客 http://blog.csdn.net/baimafujinji,为保证公式、图表得以正确显示,强烈建议你从该地址上查看原版博文。本博客主要关注方向包括:数字图像处理、算法设计与分析、数据结构、机器学习、数据挖掘、统计分析方法、自然语言处理。

【全文完】

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/182103.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • vscode前端插件配置[通俗易懂]

    vscode前端插件配置[通俗易懂]vscode前端最佳插件配置

  • vue实现文件上传和下载_vue上传文件前端完整实例

    vue实现文件上传和下载_vue上传文件前端完整实例文件上传这里使用elementui组件库的文件上传组件1.手动上传(文件选取后需点击确认上传)action:上传地址auto-upload:是否在选取文件后立即进行上传,默认true手动上传要将其设置为falsebefore-upload:上传文件之前的钩子,参数为上传的文件,上传格式的规定要求可在此钩子函数中写(示例中规定上传格式xlsx或xls)on-success:文件上传成功时的钩子,function(response,file,fileList)ref:注册DOM对象(点

  • stream的分组_java快速对list分组

    stream的分组_java快速对list分组Stream流-分组操作文章目录Stream流-分组操作方法1,`groupingBy(Function)`方法2,`groupingBy(Function,Collector)`方法3:`groupingBy(Function,Supplier,Collector)`Collectors.groupingBy()3个方法的使用示例/**员工*@authorYang*@create2020-07-0919:57*/publicclassEmployee{

  • ue4地编教程_编绳方法

    ue4地编教程_编绳方法一、基本操作二、导入模型和贴图##(一)导入UE4设置:1、导入:2、导入设置##(二)从3DMAX出设置##(三)从Blender导出

  • java工作流详解

    java工作流详解什么是工作流?工作流:两个或两个以上的人,为了共同的目标,连续的以串行或并行的方式去完成某一业务。业务:工作流所指业务涵盖了与经营相关的活动。串行或并行:业务中的步骤也许以一步接着一步的方式进行,我们称之为串行;或者由不同的人或组合根据不同的情况处理,我们称之为并行。两个或两个以上的人:如工作流的名称所表达的含义,一个人处理的业务不称其为工作流,只有任务从一个人”流”向另一个人的时候,才有工作流。共同的目标:个体参与工作流必须是为了同一个工作目标。如果个体处于两个相互独立的项目之中,不会

  • springboot 整合 Mybatis、JPA、Redis「建议收藏」

    springboot 整合 Mybatis、JPA、Redis「建议收藏」引言在springboot项目中,我们是用ORM框架来操作数据库变的非常方便。下面我们分别整合mysql,springdatajpa以及redis。让我们感受下快车道。我们首先创建一个springboot项目,创建好之后,我们来一步步的实践。使用mybatis引入依赖:<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis

    2022年10月20日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号