python图像处理基本操作有哪些(python,开发技术)

时间:2024-05-09 20:48:20 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

一、PIL库对图像的基本操作

1、读取图片

PIL网上有很多介绍,这里不再讲解。直接操作,读取一张图片,将其转换为灰度图像,并打印出来。

fromPILimportImageimportmatplotlib.pyplotaspltpil_im=Image.open("empire.jpeg")pil_image=pil_im.convert("L")plt.gray()plt.imshow(pil_image)plt.show()

输出如下所示:

python图像处理基本操作有哪些

2、转换图片格式

PIL可以将图像保存为多种格式,下面将PNG格式文件保存为JPG格式:

fromPILimportImageimportglobimportosfilelist=glob.glob("E:/pythonProject1/filelist/*.png")forinfileinfilelist:outfile=os.path.splitext(infile)[0]+'.jpg'ifinfile!=outfile:try:Image.open(infile).save(outfile)exceptIOError:print("cannotconvert",infile)

输出结果如下所示:

python图像处理基本操作有哪些

3、输出文件夹中所有图片的文件名列表

importosdefget_imlist(path):"""返回目录中所有JPG图像的文件名列表"""return[os.path.join(path,f)forfinos.listdir(path)iff.endswith('.jpg')]print(get_imlist("E:/pythonProject1/filelist/"))

输出为文件名列表

二、Matplotlib

1、绘制图像、点和线

fromPILimportImagefrompylabimport*#读取图像到数组中im=array(Image.open("empire.jpeg"))#绘制图像imshow(im)#一些点x=[100,100,400,400]y=[200,500,200,500]#使用红色星状标记绘制点plot(x,y)#默认为蓝色实线#plot(x,y,'r*')#红色星状标记#plot(x,y,'go-')#带有圆圈标记的绿线#plot(x,y,'ks')#带有正方形标记的黑色虚线#绘制连接前三个点的线plot(x[:3],y[:3])axis('off')#添加标题,显示绘制的图像titles=['empire']plt.title=titlesshow()

上面的代码首先绘制出原始图像,然后在 x 和 y 列表中给定点的x坐标和y坐标上绘制出红色星状标记点,最后在两个列表表示的前两个点之间绘制一条线段。该例子的绘制结果下图:

python图像处理基本操作有哪些

2、图像轮廓和直方图

绘制轮廓需要对每个坐标 [x, y] 的像素值施加同一个阈值,所以首先需要将图像灰度化,这里用 PIL 的convert()方法将图像转换成灰度图像。图像的直方图用来表征该图像像素值的分布情况。

fromPILimportImagefrompylabimport*#读取图像到数组中im=array(Image.open("empire.jpeg").convert('L'))#创建一个图像figure()#不使用颜色信息gray()#在原点的左上角显示轮廓图像contour(im,origin='image')#检测图像轮廓axis('equal')axis('off')show()#新建一个图像figurehist(im.flatten(),128)#绘制图像直方图show()

图像轮廓图输出如下所示:

python图像处理基本操作有哪些

输出图像直方图如下所示:

python图像处理基本操作有哪些

3、交互式标注

在一幅图像中标记一些点,或者标注一些训练数据。PyLab库中的ginput()函数就可以实现交互式标注。在图像点击三次,则程序会自动将这3个点的坐标点[x, y]保存到x列表里。

fromPILimportImagefrompylabimport*im=array(Image.open("empire.jpeg"))imshow(im)print("pleaseclick3points")x=ginput(3)print("youclicked",x)show()

三、Numpy

1、图像数组表示

对于图像数据,下面的例子阐述了这一点

fromPILimportImageimportnumpyasnpim=np.array(Image.open("empire.jpeg"))print(im.shape,im.dtype)

输出为:
(1024, 683, 3) uint8

每行的第一个元组表示图像数组的大小(行、列、颜色通道),紧接着的字符串表示数组元素的数据类型。因为图像通常被编码成无符号八位整数(uint8),载入图像并将其转换到数组中,数组的数据类型为“uint8”。

2、灰度变换

对图像进行灰度变换,如下所示:

fromPILimportImageimportnumpyasnpim=np.array(Image.open("empire.jpeg"))print(im.shape,im.dtype)fromPILimportImagefrommatplotlib.pylabimportpltfromnumpyimport*im1=array(Image.open('empire.jpeg').convert('L'))im2=255-im1#对图像进行反向处理im3=(100.0/255)*im1+100#将图像值变换到100-200之间im4=255.0*(im1/255)**2#对图像像素值求平方后得到的图像images=[im1,im2,im3,im4]titles=["f(x)=x","f(x)=255-x","f(x)=(100/255)*x+100","f(x)=255*(x/255)^2"]#输出图中的最大像素值和最小像素值print(int(im1.min()),int(im1.max()))print(int(im2.min()),int(im2.max()))print(int(im3.min()),int(im3.max()))print(int(im4.min()),int(im4.max()))foriinrange(4):plt.subplot(2,2,i+1)#2行2列,按编号顺序排列plt.imshow(images[i])#显示图像plt.title(titles[i])#显示标题plt.gray()#plt.xticks([])#plt.yticks([])plt.axis('equal')plt.axis('off')plt.show()

输出接入如下所示:

python图像处理基本操作有哪些

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:python图像处理基本操作有哪些的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Android中AsyncTask的工作原理是什么下一篇:

20 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18