一、Numpy
# numpy图像应用np来reshape img = np.reshape(img,(new_H,new_W,new_C)) img = img.reshape(new_H,new_W,new_C) # 另一种写法 # 以上两种写法等价,另外不能去掉“img = ”,否则没有reshape成果。 # new_W*new_H*new_C 必须等于 old_H*old_W*old_C。 否则会报错 # 这种reshape不倡议用于图像,因为它会搞乱HW与C之间的关系,毁坏掉图像
# numpy图像应用np来resize img=np.resize(img,(new_H,new_W,new_C)) img.resize(new_H,new_W,new_C) # 另一种写法 # 以上两种写法等价,并且不能加上“img = ”,否则会报错。 # new_W*new_H*new_C 必须等于 old_H*old_W*old_C。 否则会报错 # 这种resize也不倡议用于图像,因为它会搞乱HW与C之间的关系,毁坏掉图像
img = np.zeros((H,W),dtype=np.uint8)
二、CV2
# 读取numpy图像 img = cv2.imread('test.jpg', 0) # 这个参数0,等价于:cv2.IMREAD_GRAYSCALE (灰度) # 加一个参数0示意读取灰度图 # H,W,C = img.shape
# numpy图像应用cv2来resize img = cv2.resize(img, (new_W, new_H), interpolation=cv2.INTER_LINEAR) # new_W*new_H 能够不等于 old_H*old_W,后果就是形变 # 能够不写“img = ”这一部分,因为图像cv2.resize,它实在的形态就被扭转了,而不是在正本上改的
# W(宽)方向为x轴; H(高)方向为y轴 1. cv2.circle(img, (圆心x,圆心y) ,半径, (255,255,255), -1) 2. cv2.rectangle(img, (左上角x,左上角y), (右上角x,右上角y), (255,255,255), -1) 3. 数组操作:img[y][x]。即先遍历行,再遍历列,合乎c或python语言中失常数组的程序
三、PIL
# PIL读取数据 img = Image.open('test.jpg').convert('L') # 加一个convert示意读取灰度图 # W,H = img.size
img = img.resize((new_W, new_H), Image.BILINEAR) # new_W*new_H 能够不等于 old_H*old_W,后果就是形变 # 在正本上批改的,后面必须加“img = ”
四、matplotlib
from PIL import Image img=Image.open('1.png') img.show()
PIL应用open()函数来关上图片,应用show()函数来显示图片。这种图片显示方式是调用操作系统自带的图片浏览器来关上图片,有些时候这种形式不太不便,因而咱们也能够应用另上一种形式,让程序来绘制图片。
from PIL import Image img=Image.open('1.png') import matplotlib.pyplot as plt plt.ion() # 将交互操作模式关上,用来顺次关上多张图片,即上一张敞开,下一张关上的这种程序操作 plt.imshow(img) plt.show() # 图片展现 img.save('1.jpg') # 图片保留 plt.axis('off') # 去除坐标轴 plt.savefig('1.jpg')# 图片保留,会生成坐标轴,并且会改边图像的原尺寸,不好用
这种办法尽管简单了些,但举荐应用这种办法,它应用一个matplotlib的库来绘制图片进行显示。matplotlib是一个业余绘图的库,相当于matlab中的plot。
另外须要留神的是,如果想用matplotlib来展现或保留图片,倡议用PIL来读取,不倡议用cv2。
因为PIL读取图片的通道程序是R、G、B,合乎matplotlib的要求;
而如果用cv2来读取,通道程序是B、G、R,能够展现并保留,然而色彩会变得很奇怪。
五、tensor
H,W,C = tensor.shape # 间接保留tensor图像 from torchvision import utils as vutils vutils.save_image(tensor_img, './test.jpg', normalize=True)
*、 PIL与cv2互相转化
# PIL转cv2: img = cv2.cvtColor(np.asarray(img),cv2.COLOR_RGB2BGR) # cv2转PIL: img = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))