5.7

所花时间:3小时

代码量:17

博客篇:1

python总结

比较三种Python图形处理库或图像处理库的异同点。

一. opencv:      cv2

'cv2'

import cv2

import os

# im1 = cv2.imread(r'C:\Users\admin\Desktop\Celeba\celeba/000001.jpg')#

# im1 = cv2.imread(r'C:\Users\admin\Desktop\Celeba\celeba')#报错,要明确到图片名

im1 = cv2.imread(os.path.join(r'C:\Users\admin\Desktop\Celeba\celeba','000001.jpg'))#等同第3

im2 = cv2.resize(im1,(200,200)) #默认双线性插值

cv2.imshow('abcd',im2)

cv2.waitKey(0) #无限期等待输入,按任意键结束

 

1.① opencv读进来的图片已经是一个numpy矩阵了!!!彩色图片维度是(高度,宽度,通道数)。数据类型是uint8

 

   ②opencv读进来的图片的通道排列是BGR,而不是主流的RGB

 

2.①img1 = cv2.imread(path) 读入图片

 

   ②cv2.imshow(winname, img1)显示图片:winname: 窗口名; image: 要显示的图片

 

   ③cv2.imwrite(path, img1)保存图片

 

   ④cv2.waitKey(0) 无限期等待输入,按任意键结束

 

   ⑤cv2.destroyAllWindows() 销毁所有创建的窗口

 

   ⑥cv2.resize( ),参数输入是 宽××通道

 

二.matplotlib :  from matplotlib import pyplot as plt

'matplotlib'

import cv2

import os

from matplotlib import pyplot as plt

 

im1 = cv2.imread(os.path.join(r'C:\Users\admin\Desktop\Celeba\celeba','000001.jpg'))

# im1 = plt.imread(os.path.join(r'C:\Users\admin\Desktop\Celeba\celeba','000001.jpg'))#同上

"""createPlot = subplot(222)表示画布分成(2*2=4)个小区域,

并将图createPlot绘制在画布中的第二个子区域,也就是右上角位置。"""

#cv2BGR格式

plt.subplot(121)

plt.imshow(im1)

plt.title('BGR')

#调为正常的BGR

plt.subplot(122)

im1_ = im1[:,:,::-1] #BGR -> RGB

plt.imshow(im1_)

plt.title('RGB')

'plt.imshow(img)是在图像上增加一个img,不负责显示。plt.show()才能显示'

plt.show()

#获取属性

print(im1.shape)

print(im1.size)

print(im1.dtype)

 

1. ①调用matplotlib进行图片展示时,需要注意调整图片的通道顺序。因为cv2读取图片的通道顺序是BGR,而matplotlibRGB,故调用plt.imshow(img)前,必须将img的通道调整为RGB

 

   ②plt.imshow(img)是在图像上增加一个img,不负责显示。plt.show()才能实现显示。

 

      注:plt.imshow(img)显示的图是带坐标的,不想要显示坐标,需跟着一行代码 plt.axis('off')

 

2.①img1 = plt.imread(path) 读入图片

 

   ②plt.imshow(img1)后,还需plt.show()来实现显示。

 

   ③plt.savefig(path)保存图片:在其前必须写plt.imshow(img1),否则保存图全是空白的。

 

   ④plt.subplot(122),表示画布分成(1*2=2)个小区域, 并将图绘制在画布中的第二个子区域,也就是右上角位置。

 

三.PIL:  from PIL import Image

 

'PIL Image'

from PIL import Image

import numpy as np

import os

 

im1 = Image.open(os.path.join(r'C:\Users\admin\Desktop\Celeba\celeba','000001.jpg'))

im1.show()

 

#除了cv2,其他库读进来的图片都不是矩阵,我们将图片转矩阵

arr = np.array(im1)

print(arr.shape)

print(arr.dtype)

#矩阵再转为图像

im2 = Image.fromarray(arr)

# im2.save('01.png')

1. 除了cv2,其他库读进来的图片都不是矩阵。所以我们经常在图片读进来后,先转为矩阵下的操作,之后再转回图片。

 

2.① img1 = Image.open(path) 读入图片

 

   ②PIL下,读入图片后都是对图片做直接操作。如:img1.show() 直接显示图片,img1.resize((w,h))img1.save(path)等。

 

posted @ 2024-05-07 18:57  umiQa  阅读(2)  评论(0编辑  收藏  举报