一、Python【基础篇1-3数组】

一、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.输出结果

在这里插入图片描述

是不是超级简单???

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值