数字图像处理2——图像基本运算

1.改写彩色图像像素的RGB值

#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])

数字图像处理2——图像基本运算_第1张图片

2.OpenCV彩色图像转换为灰度图像

#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可视化这三张图

数字图像处理2——图像基本运算_第2张图片

3.索引图像的读取及其数据构成

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可视化读入的图像

数字图像处理2——图像基本运算_第3张图片

然后打印出图像的各种属性,包括:格式、宽高、类型

然后转换成数组,打印出数组的大小和元素

数字图像处理2——图像基本运算_第4张图片

然后通过getpalette()方法穿件调色板并打印出各种属性

数字图像处理2——图像基本运算_第5张图片

4.将灰度索引图像转换为彩色图像

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 索引色图像

数字图像处理2——图像基本运算_第6张图片

你可能感兴趣的:(数字图像处理实战,opencv,人工智能,计算机视觉)