一、Python【基础篇1-3数组】
Python 没有内置对数组的支持,可以使用 Python 列表代替。可以回顾我们上篇讲的列表,很简单。
不过我们介绍一个Python 语言强大的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量
的数学函数库。学python必备。
pip install numpy
# 不过安装了anaconda的同学不需要再安装,因为conda已经实现安装好。
我们会用到opencv开源图像处理库,可以看看我发的另外一篇博客进行了解。
接下来,我们操作像素
二、框架搭建
1.框架
import cv2 as cv
import numpy as np
cap = cv.VideoCapture("C:/Users/23608/Desktop/MysteriousKnight/cyberpunk壁纸/OIP.jpg")
while 1:
_, img = cap.read()
print(img)
cv.imshow("img",img)
cv.waitKey(0)
2.输出结果
从输出结果中我们可以看出,图像在计算机里面是一个三维数组,数值是0-255的范围,由RGB三个通道组成
ok,现在我们使用opencv自带的转灰函数
这里我们用cv.VideoCapture函数读取本地的一张图像cv.cvtColor让图像转灰度图
图像从三个通道变成了一个通道的灰度图(三维数组->二维数组)
我们可否自己操作像素的每一个值达到灰度图的效果?
goto
3.灰度函数
图像灰度化处理主要有以下几种方式分量法、最大值法、平均值法、加权平均法
这里我们使用加权平均值法,感兴趣的同学自己去了解,修行靠个人
我们先对图像的形状做出打印
import cv2 as cv
import numpy as np
cap = cv.VideoCapture("C:/Users/23608/Desktop/MysteriousKnight/cyberpunk壁纸/OIP.jpg")
while 1:
_, img = cap.read()
print(img.shape)
cv.imshow("img",img)
cv.waitKey(0)
输出结果
观察到图像是高266 * 宽474 * 3个通道的RGB图
我们将输出的形状做一个数组变换,转换为数组
img_shape = np.array(img.shape)
# np.array可以创建数组,也可以将其他的数据类型转化为数组
输出结果
ok,我们来编写转灰度图函数
def garyimg(img, rbg_shape):
rgb_img = img.copy() # 将img赋值给rgb_img
gary = np.zeros((rbg_shape[0], rbg_shape[1]), dtype=np.uint8) # 创建一个全为0的二维数组,因为灰度图的形状为二维数组
rgb = rbg_shape
# 对gary的像素进行操作,根据加权平均值法的公式
for _ in range(rgb[0]):
for i in range(rgb[1]):
gary[_][i] = int(0.299 * rgb_img[_][i][0] + 0.578 * rgb_img[_][i][1] + 0.114 * rgb_img[_][i][2])
return gary
4.全部代码
import cv2 as cv
import numpy as np
cap = cv.VideoCapture("C:/Users/23608/Desktop/MysteriousKnight/cyberpunk壁纸/OIP.jpg")
def garyimg(img, rbg_shape):
rgb_img = img.copy()
gary = np.zeros((rbg_shape[0], rbg_shape[1]), dtype=np.uint8)
rgb = rbg_shape
for _ in range(rgb[0]):
for i in range(rgb[1]):
gary[_][i] = int(0.299 * rgb_img[_][i][0] + 0.578 * rgb_img[_][i][1] + 0.114 * rgb_img[_][i][2])
return gary
while 1:
_, img = cap.read()
img_shape = np.array(img.shape)
gary = garyimg(img, img_shape)
cv.imshow("img", img)
cv.imshow("gary", gary)
cv.waitKey(0)
5.输出结果
是不是超级简单???