1.Numpy#numpy图片使用np整形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的关系,破坏图像#numpyimagesusenptoresizeimg=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。否则会报错#images不推荐这种resize,因为会打乱HW和C的关系,破坏imageimg=np.zeros((H,W),dtype=np.uint8)二。CV2#读取numpy图像img=cv2.imread('test.jpg',0)#这个参数为0,相当于:cv2.IMREAD_GRAYSCALE(grayscale)#加一个参数0读取灰度图像#H,W,C=img.shape#numpy图像使用cv2调整大小img=cv2.resize(img,(new_W,new_H),interpolation=cv2.INTER_LINEAR)#new_W*new_H可能不等于old_H*old_W,结果变形#可以不写“img=”部分,因为图像cv2.resize,它的真实形状改变了,不在copy上#W(width)方向是x轴;H(高度)方向为y轴1.cv2.circle(img,(centerx,centery),radius,(255,255,255),-1)2.cv2.rectangle(img,(左上角x,左上角角y),(右上角x,右上角y),(255,255,255),-1)3.数组运算:img[y][x]。即先遍历行,再遍历列,符合c或python语言中普通数组的顺序。3.PIL#PIL读取数据img=Image.open('test.jpg').convert('L')#加一个convert表示读取灰度图#W,H=img.sizeimg=img.resize((new_W,new_H),Image.BILINEAR)#new_W*new_H可能不等于old_H*old_W,结果变形#在copy上修改,前面必须加“img=”。4.matplotlibfromPILimportImageimg=Image.open('1.png')img.show()PIL使用open()函数打开图片,show()函数显示图片。这种显示图片的方式是调用操作系统自带的图片浏览器打开图片。有时候这种方式不方便,所以我们也可以用另一种方式让程序来画图。fromPILimportImageimg=Image.open('1.png')importmatplotlib.pyplotaspltplt.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,可以显示保存,但是颜色会变得很奇怪。5.tensorH,W,C=tensor.shape#直接从torchvisionimportutils中保存tensor图像为vutilsvutils.save_image(tensor_img,'./test.jpg',normalize=True)*,PIL和cv2相互转换#PILtocv2:img=cv2.cvtColor(np.asarray(img),cv2.COLOR_RGB2BGR)#cv2toPIL:img=Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))
