阅读量:3
这篇教学会介绍使用OpenCV,取得影像的长宽尺寸、以及读取影像中某些像素的颜色数值。
因为程式中的OpenCV 会需要使用镜头或GPU,所以请使用本机环境( 参考:使用Python 虚拟环境) 或使用Anaconda Jupyter 进行实作( 参考:使用Anaconda ) ,并安装OpenCV 函式库( 参考:OpenCV函式库)。
shape 取得长宽与色版数量
使用OpenCV 的imread() 方法读取的影像后,透过shape 属性,能取得影像的宽、长和色版数量,通常色版数量( 色彩通道) 会由R、G、B 色光三原色组成,如果影像不具有三个色版,则只会取得宽与长。
import cv2 img = cv2.imread('meme.jpg') print(img.shape) # 得到 (360, 480, 3) cv2.imshow('oxxostudio', img) cv2.waitKey(0) # 按下任意键停止 cv2.destroyAllWindows()
size 取得像素总数
使用OpenCV 的imread() 方法读取的影像后,透过size 属性,能取得影像的像素总数,像素总数为「宽x 长x 色版数量」。
import cv2 img = cv2.imread('meme.jpg') print(img.size) # 518400 ( 360x480x3 ) cv2.imshow('oxxostudio', img) cv2.waitKey(0) cv2.destroyAllWindows()
dtype 取得数据类型
使用OpenCV 的imread() 方法读取的影像后,透过dtype 属性,能取得影像的数据类型。
import cv2 img = cv2.imread('meme.jpg') print(img.dtype) # uint8 cv2.imshow('oxxostudio', img) cv2.waitKey(0) cv2.destroyAllWindows()
取得每个像素的色彩资讯
使用OpenCV 的imread() 方法读取的影像后,可以印出图片的「三维阵列」资讯,以下方的程式码为例,可以印出一张4x4 的图片阵列,可以看到每一个像素都有B、G、R 三个颜色资讯,颜色范围均是0~255 ( 范例图片将4x4 放大,比较容易理解)。
import cv2 img = cv2.imread('meme-test.png') print(img) cv2.imshow('oxxostudio', img) cv2.waitKey(0) cv2.destroyAllWindows()
了解原理后,也可以使用变数来装载图片的色彩资讯。
import cv2 img = cv2.imread('meme-test.png') b, g, r = cv2.split(img) print(b) print(g) print(r) cv2.imshow('oxxostudio', img) cv2.waitKey(0) cv2.destroyAllWindows()
既然能取得图片的每个像素资讯,就能针对这些像素进行修改,举例来说,透过阵列切片赋值的方法,就能将一张去除图片中的红色、绿色或蓝色。
import cv2 img_blue = cv2.imread('meme.jpg') img_green = cv2.imread('meme.jpg') img_red = cv2.imread('meme.jpg') img_blue[:,:,1] = 0 # 将绿色设为 0 img_blue[:,:,2] = 0 # 将红色设为 0 img_green[:,:,0] = 0 # 将蓝色设为 0 img_green[:,:,2] = 0 # 将红色设为 0 img_red[:,:,0] = 0 # 将蓝色设为 0 img_red[:,:,1] = 0 # 将绿色设为 0 cv2.imshow('oxxostudio blue', img_blue) cv2.imshow('oxxostudio green', img_green) cv2.imshow('oxxostudio red', img_red) cv2.waitKey(0) cv2.destroyAllWindows()