使用numpy进行图片处理
一张平面图片是由无数个像素点按照坐标(x, y)(也可以理解为行、列)排列组合构成的,图片数据格式就是一个三维的数字列表,数据结构如下:
[[[247 218 213]
[255 233 229]
[255 238 238]
...
[127 186 236]
[126 185 235]
[120 179 229]]
...
[[ 50 137 193]
[ 59 154 198]
[ 59 168 190]
...
[ 25 26 30]
[ 25 26 30]
[ 25 26 30]]]
数据当中的一维数组中的数据([247 218 213])代表该像素点的颜色数据(三原色RGB),二维数组代表着行号(y),整个一维数组代表着列号(x),用表格进行表示:
247 218 213 | 255 233 229 | … | 126 185 235 | 120 179 229 |
---|---|---|---|---|
… | … | … | … | … |
50 137 193 | 59 154 198 | … | 25 26 30 | 25 26 30 |
图像处理
使用cv2这个库读取图片数据,并将处理好的图片数据进行显示
import numpy as np
import cv2 # 需下载python库
data = cv2.imread("duck.jpg", cv2.IMREAD_COLOR) # 读取图片数据
img = np.array(data) # 使用读取数据建立一个ndarray
cv2.imshow("show", img) # 生成一个窗口显示图片
因此只需要对img进行索引操作修改数据,就可以实现图像的处理:
图片x轴镜像:
img = img[::-1, :, :] # 从二维数组最后一个开始取数据(从最后一行开始)
cv2.imshow("show2", img)
图片y轴镜像:
img = img[:, ::-1, :] # 每行最后一列开始取数据
cv2.imshow("show8", img)
对图片进行压缩(纵向)
img = img[:: , :: 2, :] # 每2次取一个列数据
cv2.imshow("show5", img)
也可以调整图片颜色
灰度图片
img_gray = img[:, :, 2]*0.299 + a[:, :, 1]*0.587 + a[:, :, 0]*0.114 # 调整三原色数据
img_gray = img_gray.astype(np.uint8) # 数据取整
cv2.show("gray", img_gray)
设置曝光度
img_light = (img*2.0) # 范围:[0,255] 超过255
# 裁剪 超过范围的
img_light = np.clip(img_light, a_min=None, a_max=255.).astype(np.uint8)
cv2.imshow("light", img_light)
numpy的整体用法和一些实际用途基本就介绍到这了。