#RGB真彩色图像的数据结构
#导入用到的包
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
%matplotlib inline
#读入一幅彩色图像
img = cv.imread('./imagedata/old_villa.jpg', cv.IMREAD_COLOR)
img2 = img.copy()
print('数组维数:', img.ndim)
print('图像的高、宽及颜色分量数:', img.shape)
print('图像数据类型:', img.dtype)
pixb=img[100,300,0]
print('坐标[100,300]处像素的B分量值:',pixb)
pixbgr=img[100,300,:]
print('坐标[100,300]处像素的BGR颜色分量值:',pixbgr)
用cv读入图像
用copy()方法生成一个原图像副本
然后输出图像的各种属性,包括:维数(ndim)、chw(shape)、数据类型(dtype)、位于特定位置的像素强度([x,y,c])
#OpenCV将RGB真彩色图像转换为灰度图像
#导入用到的包
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#以灰度图像方式读入一幅彩色图像
img_gray1 = cv.imread('./imagedata/bigeyemonkey.jpg', cv.IMREAD_GRAYSCALE)
img_color = cv.imread('./imagedata/bigeyemonkey.jpg', cv.IMREAD_COLOR)
img_gray2 = cv.cvtColor(img_color, cv.COLOR_BGR2GRAY)
用cv的不同方式读入图片(IMREAD_GRAYSCALE、IMREAD_COLOR)
并且将读入的彩色图转换成灰度图cvtColor()
然后通过plt可视化这三张图
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#读入一幅索引图像
im = Image.open('./imagedata/trees.tif')
plt.figure(figsize=(12,5))
plt.imshow(im)
plt.title('trees, original indexd image')
plt.axis('off')
plt.show()
print('图像文件格式:', im.format)
print('图像的宽、高:', im.size)
print('图像类型:', im.mode)
imgX = np.array(im)
print('颜色索引值数组的大小:', imgX.shape)
print('颜色索引值数组的元素:\n', imgX)
impal = im.getpalette()
num_colours = int(len(impal)/3)
cmaparray = np.array(impal).reshape(num_colours, 3)
print('图像调色板数组的大小:', cmaparray.shape)
print('图像调色板数组的元素:\n', cmaparray)
用PIL读入图像
直接通过plt可视化读入的图像
然后打印出图像的各种属性,包括:格式、宽高、类型
然后转换成数组,打印出数组的大小和元素
然后通过getpalette()方法穿件调色板并打印出各种属性
import cv2 as cv
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#以灰度图像方式读入一幅索引图像
img_gray = cv.imread('./imagedata/trees.tif', cv.IMREAD_GRAYSCALE)
img_bgr = cv.applyColorMap(img_gray, cv.COLORMAP_JET)
usercmap = np.zeros((256,3),dtype= np.uint8)
usercmap[ 0: 64,:] = [255,0,0] #red
usercmap[ 64:128,:] = [255,255,0] #yellow
usercmap[128:192,:] = [0,255,0] #green
usercmap[192:256,:] = [0, 0,255] #blue
#imgrgb = usercmap[img_gray]
im_indexed = Image.fromarray(img_gray,mode = 'P')
im_indexed.putpalette(list(usercmap.flatten()))
im_indexed.save('treesnew.png')
plt.figure(figsize=(16,6))
plt.subplot(1,3,1); plt.imshow(img_gray, vmin=0,vmax=255, cmap = 'gray')
plt.title('trees, gray image')
plt.axis('off')
plt.subplot(1,3,2); plt.imshow(img_bgr[:,:,::-1])
plt.title('trees,BGR color image, by OpenCV')
plt.axis('off')
plt.subplot(1,3,3); plt.imshow(im_indexed)
plt.title('trees,Indexed color image, by Pillow')
plt.axis('off')
#plt.tight_layout()
plt.show()
用cv读入一张图片
定义了一个灰度图映射到颜色空间的二维数组,然后将颜色映射到索引色图上
保存使用自定义调色板的索引色图像
分别可视化灰度图和伪彩色图像和自定义调色板的 Pillow 索引色图像