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,为保证公式、图表得以正确显示,强烈建议你从该地址上查看原版博文。本博客主要关注方向包括:数字图像处理、算法设计与分析、数据结构、机器学习、数据挖掘、统计分析方法、自然语言处理。

【全文完】

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

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

(0)
上一篇 2022年10月14日 下午1:00
下一篇 2022年10月14日 下午1:16


相关推荐

  • [史]世界史上的6大古帝国

    [史]世界史上的6大古帝国nbsp 西方史书上记载的每个世纪最强大的国家 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 公元前 15 世纪 埃及王国 公元前 14 世纪 埃及王国 赫梯王国 并列 公元前 13 世纪 埃及王国 商王国 并列 公元前 12 世纪 埃及王国 公元前 11 世纪 空缺 公元前 10 世纪 周王国 公元前 9 世纪 亚述帝国 公

    2026年3月19日
    2
  • nginx转发配置

    nginx转发配置转发在最新版本的 Nginx 中 动态配置文件位置在 etc nginx conf d default conf CentOS7 1 Nginx 在 ip 为 xxx xxx xxx 200 的服务器上 2 某个 web 服务在 xxx xxx xxx 201 7180 的服务器上要实现 nginx 来转发该 web 服务 在 Nginx 的服务器上对 etc nginx conf d default conf 进行

    2026年3月26日
    2
  • 找到一篇关于2.4/5G信道的新介绍

    找到一篇关于2.4/5G信道的新介绍 关于部分手机无法搜索到5Gwifi信号的解决方法第一次在论坛发基础理论贴,希望能普及关于5G wifi的基础知识。         发此贴的原因是基于本人突然发现:MX3刷了3.4.1系统后,搜索不到5G的wifi信号了(本人的路由器 dir 808L),如所谓的魅黑一般(本人算是半个魅族的fans,从E3 M6SL M9 MX MX2TD MX3TD一直用着魅族的产品,M6SL从2007年买…

    2022年6月7日
    33
  • GBDT算法简介_gbdt算法原理

    GBDT算法简介_gbdt算法原理在网上看到一篇GBDT介绍非常好的文章,GBDT大概是非常好用又非常好用的算法之一了吧(哈哈两个好的意思不一样)        GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答

    2022年10月12日
    5
  • 在Cherry Studio配置Nano Banana Pro,生成自己想要的图片!

    在Cherry Studio配置Nano Banana Pro,生成自己想要的图片!

    2026年3月15日
    2
  • sqlite开发图形界面_linux下sqlite3头文件

    sqlite开发图形界面_linux下sqlite3头文件哈哈,朋友编写了一款服务器web界面管理工具,使用到了SQLite数据库。SQLite介绍SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl…

    2025年10月10日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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