一、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))


Solryu
18 声望6 粉丝