取得图像信息
这篇教学会介绍使用 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()
微信扫码关注
抖音扫码关注