共计 1988 个字符,预计需要花费 5 分钟才能阅读完成。
一、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))
正文完