本文记录下常用的图像处理方法及知识点
- 图像通常分为二值图像,灰度图像和彩色图像(RGB)图像,白色像素为255,黑色像素为0
- 彩色图像转灰度图像,可以根据加权平均值算法:根据光的亮度特性,
R=G=B=R0.299+G*0.587+B0.144
-
图像读取操作最常见的是由opencv中的cv2.read()函数以及PIL中的Image函数。
-
opencv方法:读取出来为数组形式
img = cv2.imread(文件名,[参数])
参数(1) cv2.IMREAD_UNCHANGED (图像不可变)
参数(2) cv2.IMREAD_GRAYSCALE (灰度图像,不加会出现3个一样的维度通道)
参数(3) cv2.IMREAD_COLOR (读入彩色图像)
参数(4) cv2.COLOR_BGR2RGB (图像通道BGR转成RGB)
- 利用PIL中的Image函数,这个函数读取出来不是array格式,这时候需要用 np.asarray(im) 或者np.array()函数,区别是 np.array() 是深拷贝(副本),np.asarray() 是浅拷贝
from PIL import Image
import numpy as np
I = Image.open('./cc_1.png')
I.show()
I_array = np.array(I)
print I_array.shape
- opencv方法
retval = cv2.imwrite("test.jpg", img)
- PIL中的Image函数
I.save('./save.png')
- 从PIL.Image格式转换为numpy格式
src = np.array(image).astype(np.uint8)
- 从tensor格式转换为PIL.Image格式
from torchvision import transforms
img=transforms.ToPILImage()(img) #注意用法
- array转换成image
Image.fromarray(np.uint8(img))
def __imgEncodeBase64(img):
if type(img) == str:
img = bytes(img, 'utf-8')
return base64.b64encode(img).decode()
def __imgDecodeBase64(img):
if type(img) == str:
img = bytes(img, 'utf-8')
return base64.b64decode(img)
def Base64ToImg(imgStr):
return Image.open(io.BytesIO(__imgDecodeBase64(imgStr)))
def ImgToBase64(img):
output_buffer = io.BytesIO()
img.convert('RGB').save(output_buffer, format='JPEG')
return __imgEncodeBase64(output_buffer.getvalue())