Python numpy库的应用、matplotlib绘图、opencv的应用

news2024/11/28 6:30:15

numpy

import numpy as np

l1 = [1, 2, 3, 4, 5]

# array():将列表同构成一个numpy的数组
l2 = np.array(l1)
print(type(l2))
print(l2)
# ndim : 返回数组的轴数(维度数)
# shape:返回数组的形状,用元组表示;元组的元素个数表示数组的轴数;元组元素值表示对应轴中数组的元素个数
# 元组的元素个数表示数组的轴数;元组元素值表示对应轴中数组的元素个数
# (第一轴长,第二轴长,第三轴长...)
print(l2.ndim, l2.shape)

l2 = np.array([3, 4, 5])
print(l2)

l2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(l2.ndim, l2.shape)
print(l2)

l2 = np.array([[[1, 2, 1], [3, 4, 2]], [[5, 6, 3], [7, 8, 4]]])
print(l2.shape)  # --> (2, 2, 2)

# l3 = l2.reshape((2, 6))  # reshape() : 改变数组的形状
l3 = l2.reshape(2, 6)
print(l3)

l4 = l2.reshape(1, 2, 2, 3)
print(l4)

# arange(start, stop, step):产生某个范围数据的 一维数组 [start, stop, step)
l5 = np.arange(1, 11).reshape(5, 2)  # 表示第一个括号有5个元素,第二个括号有2个元素
print(l5)

l5 = np.arange(1, 11, 2)
print(l5)


D:\Anaconda\anaconda\envs\tf\python.exe D:\pycharm\python\day5\numpyy.py 
<class 'numpy.ndarray'>
[1 2 3 4 5]
1 (5,)
[3 4 5]
2 (3, 3)
[[1 2 3]
 [4 5 6]
 [7 8 9]]
(2, 2, 3)
[[1 2 1 3 4 2]
 [5 6 3 7 8 4]]
[[[[1 2 1]
   [3 4 2]]

  [[5 6 3]
   [7 8 4]]]]
[[ 1  2]
 [ 3  4]
 [ 5  6]
 [ 7  8]
 [ 9 10]]
[1 3 5 7 9]

进程已结束,退出代码0

numpy 运算

import numpy as np

A = np.array([[1, 2, 3], [4, 5, 6]])
B = np.array([[7, 8], [9, 10], [11, 12]]).reshape(2, 3)

C = A * B  # a00 * b00, a01 * b01, a02 * b02
print(C)

# numpy数组的运算实质是将 数组对应位置的元素进行运算
C = A - B
print(C)
C = A + B
print(C)
C = A / B
print(C)

C = np.sum(A, axis=1)  # 计算数组各行元素之和
print(C)
C = np.sum(A, axis=0)  # 计算数组各列元素之和
print(C)

print("---------------")
a = np.array([1, 2, 3, 4, 5]).reshape(5, 1)
b = np.array([6, 7, 8, 9, 10]).reshape(5, 1)
c = np.hstack((a, b))  # 水平方向合并
print(c)
c = np.vstack((a, b))  # 垂直方向合并
print(c)


D:\Anaconda\anaconda\envs\tf\python.exe D:\pycharm\python\day5\numpy运算.py 
[[ 7 16 27]
 [40 55 72]]
[[-6 -6 -6]
 [-6 -6 -6]]
[[ 8 10 12]
 [14 16 18]]
[[0.14285714 0.25       0.33333333]
 [0.4        0.45454545 0.5       ]]
[ 6 15]
[5 7 9]
---------------
[[ 1  6]
 [ 2  7]
 [ 3  8]
 [ 4  9]
 [ 5 10]]
[[ 1]
 [ 2]
 [ 3]
 [ 4]
 [ 5]
 [ 6]
 [ 7]
 [ 8]
 [ 9]
 [10]]

进程已结束,退出代码0

numpy 索引切片

import numpy as np

a = np.array([1, 2, 3, 4, 5, 6])
print(a, a[2], a[2:5])

b = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 0]])
# numpy的多维数组中,拥有多个轴,每个轴都有索引编号,从0开始
# 访问元素[第一轴索引,第二轴索引,第三轴索引...]
print(b, b[0, 2], b[1, 3])
print(b[1, 2:])
# 元素的索引可以进行切片处理[start:stop:step, start:stop:step...]
print(b[:, 1::2])
print("-----------")
c = np.arange(24).reshape(3, 2, 4)
print(c)
print(c[:, 0, 1:3])

D:\Anaconda\anaconda\envs\tf\python.exe D:\pycharm\python\day5\numpy索引切片.py 
[1 2 3 4 5 6] 3 [3 4 5]
[[1 2 3 4 5]
 [6 7 8 9 0]] 3 9
[8 9 0]
[[2 4]
 [7 9]]
-----------
[[[ 0  1  2  3]
  [ 4  5  6  7]]

 [[ 8  9 10 11]
  [12 13 14 15]]

 [[16 17 18 19]
  [20 21 22 23]]]
[[ 1  2]
 [ 9 10]
 [17 18]]

matplotlib 绘图

import random

import matplotlib.pyplot as plt
import numpy as np

"""
    # 1.绘制直线
"""
x = np.array([1.2, 5.8, 9])
y = np.array([1.0, 8.5, 10])
# plot() : 绘制直线,参数x必须是两点的x轴坐标集, 参数y必须是两点的y轴坐标集
# 参数c表示线条的颜色
plt.plot(x, y, c='b', lw=2)
# show(): 显示绘图
plt.show()

"""
   # 1.绘制散点(3, 3)
"""
# scatter() : 绘制散点
# 参数x:点的x坐标集 参数y:点的y坐标集  参数s:点的面积 参数c:点的颜色
# 参数marker:点的形状(o:原点,*:星形,^:三角形,s:矩形,d:菱形 )
# x = np.array([3])
# y = np.array([4])
# normal():正太分布函数 参数1:正态分布中心点  参数2:点的离散程度  参数3:产生的点的个数
# uniform():产生某个范围的点  参数1:start最小值 参数2:stop最大值 参数3:产生的点个个数
x = np.random.normal(0, 5, 1000)
y = np.random.uniform(0, 2, 1000)
# y = np.arange(1000)
plt.scatter(x[0:500], y[0:500], s=50, c='g', marker='*', linewidths=3)
plt.scatter(x[500:], y[500:], s=50, c='b', marker='o')
plt.show()

"""
    # 2.绘制正弦线
"""
x = np.arange(0, 6, 0.001)
y = np.sin(x)
plt.plot(x, y)
plt.show()

"""
    3.多子图绘制
"""
plt.subplot(221)
x = np.array([2, 4])
y = np.array([3, 8])
plt.plot(x, y)

plt.subplot(222)
x = np.arange(0, 6, 0.01)
y = np.cos(x)
plt.plot(x, y)

plt.subplot(223)
x = np.array([2, 4, 6])
y = np.array([8, 10, 12])
plt.scatter(x, y)

plt.subplot(224)
x = np.array([0, 8, 9.8])
y = np.array([0, 8, 9.8])
plt.plot(x, y)
plt.show()

"""
    4.绘制柱状图
"""
x_dat = ("jan", "feb", "mar", "apr", "may")  # x刻度名
x_index = np.arange(len(x_dat))  # 刻度的索引
y1 = (20, 10, 15, 18, 25)  # 收入数值,单位k
y2 = (8, 25, 13, 10, 12)  # 支出数值,单位k
# bar:柱状图(索引位置、高度、宽度、颜色、透明度、图例名)
plt.bar(x_index, height=y1, width=0.4, color='g', alpha=0.4, label="revenue")
plt.bar(x_index + 0.4,height=y2, width=0.4, color='r', alpha=0.4, label="expense")
plt.legend()  # 显示图例
plt.xticks(x_index + 0.2, x_dat)
plt.show()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

opencv图像处理,以及人脸识别

import cv2

"""
    1.加载本地图片并显示
"""
img = cv2.imread("1.png")
print(type(img))
print(img.shape)
# imshow(): 窗口显示 img图片
cv2.imshow("src", img)
# waitKey(n):阻塞等待按键按下,如果等待n时间内没有按键按下,则立即返回
# 如果有按键按下 则返回按下的按键的编码:默认为永久阻塞
if cv2.waitKey() == ord("q"):
    print("按下的按键为q")
    # destroyAllWindows() : 销毁窗口
    cv2.destroyAllWindows()

"""
    2.图片的变换
"""
img = cv2.imread("1.png")
# cvtColor(): 图片变换的函数,参数1:原图数据 参数2:变换的方式 COLOR_BGRA2GRAY:灰色
gray = cv2.cvtColor(img, cv2.COLOR_BGRA2GRAY)
gray = cv2.resize(src=gray, dsize=(640, 480))
print(gray.shape)  # 500, 281
# imwrite():将图片数据写入文件中
cv2.imwrite("g.png", gray)
cv2.imshow("gray", gray)
if cv2.waitKey() == ord("q"):
    cv2.destroyAllWindows()

"""
    3.图片的截取 点(36宽,15高) 框架( 101宽,42高)
"""
img = cv2.imread("1.png")
# shape(500, 281, 3) 高、宽、3
image = img[15:15+42, 36:36+101, :]
cv2.imshow("src", image)
# waitKey(n):阻塞等待按键按下,如果等待n时间内没有按键按下,则立即返回
# 如果有按键按下 则返回按下的按键的编码:默认为永久阻塞
if cv2.waitKey() == ord("q"):
    print("按下的按键为q")
    # destroyAllWindows() : 销毁窗口
    cv2.destroyAllWindows()

"""
    4.操作摄像头
"""
# 构造对象,打开摄像头 0
cap = cv2.VideoCapture(0)
if not cap.isOpened():
    print("摄像头打开失败")
    exit(-1)
while True:
    # read() :读取摄像头拍摄的一帧图片,返回ret读取的标志 和 image图片内容
    ret, img = cap.read()
    if len(img) == 0:
        print("没有图片信息,图片读取失败")
        cap.release()
        exit(-1)
    cv2.imshow("src", img)
    # waitKey 参数为毫秒
    if cv2.waitKey(1) == 27:
        break
# release():释放摄像头
cap.release()
cv2.destroyAllWindows()

"""
    5.人脸检测
"""
path = "haarcascade_frontalface_default.xml"
# 加载人脸检测的模型,使用CascadeClassifier联级分类器
classifier = cv2.CascadeClassifier(path)
cap = cv2.VideoCapture(0)
if not cap.isOpened():
    print("摄像头打开失败")
    exit(-1)
while True:
    # read() :读取摄像头拍摄的一帧图片,返回ret读取的标志 和 image图片内容
    ret, img = cap.read()
    if len(img) == 0:
        print("没有图片信息,图片读取失败")
        cap.release()
        exit(-1)
    # 由于官方给定的模型需要灰度图,所以需要转换为灰度图
    gray = cv2.cvtColor(img, cv2.COLOR_BGRA2GRAY)
    # 使用分类器对灰度图片中的人脸进行检测
    # 图片中有几张人脸,二维数组就有几个元素
    # [[x, y, w, h], [x, y, w, h]]
    face = classifier.detectMultiScale(gray)
    if len(face) != 0:
        print(face)
        for f in face:
            x, y, w, h = f # 得到人脸的x, y, w, h
            # rectangle():绘制矩形 参数pt1:人脸左上角坐标轴 参数pt2:人脸右下角坐标值 参数thickness线条粗细, color边框颜色
            cv2.rectangle(img, pt1=(x, y), pt2=(x+w, y+h),thickness=1, color=(122, 100, 30))
            # circle(): 画圆
            cv2.circle(img, center=(x+w//2, y+h//2), radius=w//2, color=(100, 133, 200))
    cv2.imshow("src", img)
    # waitKey 参数为毫秒
    if cv2.waitKey(1) == 27:
        break
# release():释放摄像头
cap.release()
cv2.destroyAllWindows()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/793474.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis数据库的9种数据类型与数据持久化

系列文章传送门&#xff1a; 【七天入门数据库】第一天 MySQL的安装部署 【七天入门数据库】第二天 数据库理论基础 【七天入门数据库】第三天 MySQL的库表操作 【七天入门数据库】第四天 数据操作语言DML 一、Redis的9种数据类型的基本操作 &#xff08;一&#xff09;k…

在家下载论文使用哪些论文下载工具比较好

在家下载论文如果不借助论文下载工具是非常艰难的事情&#xff0c;因为很多查找下载论文的数据库都是需要账号权限才可使用的。 例如&#xff0c;我们查找中文论文常用的知网、万方等数据库以及众多国外论文数据库。 在家下载知网、万方数据库论文可用下面的方法&#xff1a;…

备战秋招 | 笔试强训15

目录 一、选择题 二、编程题 三、选择题题解 四、编程题题解 一、选择题 1、在公有派生的情况下&#xff0c;派生类中定义的成员函数只能访问原基类的(&#xff09; A. 公有成员和私有成员 B. 私有成员和保护成员 C. 公有成员和保护成员 D. 私有成员,保护成员和公有成员 2…

基于Docker-compose创建LNMP环境并运行Wordpress网站平台

基于Docker-compose创建LNMP环境并运行Wordpress网站平台 1.Docker-Compose概述2.YAML文件格式及编写注意事项3.Docker-Compose配置常用字段4.Docker Compose常用命令5.使用Docker-compose创建LNMP环境&#xff0c;并运行Wordpress网站平台1. Docker Compose 环境安装下载安装查…

Spring 的元注解

一、元注解介绍 1.1.源码引入 1.2.元注解介绍 从上面的图片可知&#xff0c;Spring 有四个【负责注解其他注解】的元注解&#xff0c;分别是&#xff1a; Target&#xff1a;标识该注解可以用于标注哪些程序元素&#xff0c;比如类、方法、字段等。 Retention&#xff1a;标…

【PS教程-环境搭建】

下载地址 安装教程 软件安装包下载解压打开。找到Set-up应用程序双击运行安装。点击继续&#xff0c;或者你需要更改安装位置。软件正在安装中。软件安装成功。安装完成&#xff0c;打开软件使用。 通道抠图&#xff08;主体颜色不能和背景相近&#xff09; 抠图攻略 首先…

重学C++系列之const与static关键字分析

前言 本篇幅讲解关键字const与static&#xff0c;主要围绕在类的范围内叙述&#xff0c;包括作用和使用场景等。 一、const与static的作用 1、const修饰的成员变量&#xff0c;成员变量初始化后不能再修改。 2、const修饰的成员函数&#xff0c;成员函数不可以修改成员变量&am…

063、故障处理之快速恢复数据

数据丢失快速恢复的重要性 目的&#xff1a;尽快修复数据&#xff0c;恢复业务 快速恢复相关技术对比 常用备份恢复技术 数据快速恢复原理 MVCC 是TiDB数据库原生的一项功能&#xff0c;默认使用无需配置&#xff0c;它使用多个历史快照的方式来维护数据在某个时间点对并…

五步快速搭建个性化外卖小程序商城

随着人们生活节奏的加快&#xff0c;外卖行业蓬勃发展。为了满足用户的需求&#xff0c;许多企业开始使用小程序商城来提供外卖服务。那么&#xff0c;如何制作一个功能完善、用户友好的外卖小程序商城呢&#xff1f;下面就来为大家详细介绍一下制作的步骤。 首先&#xff0c;我…

【深度学习】以图搜索- facebook的faiss 从环境搭建到运行案例从0到1

文章目录 前言安装小试牛刀项目延伸总结 前言 Faiss的全称是Facebook AI Similarity Search。 这是一个开源库&#xff0c;针对高维空间中的海量数据&#xff0c;提供了高效且可靠的检索方法。 暴力检索耗时巨大&#xff0c;对于一个要求实时人脸识别的应用来说是不可取的。 …

当深度强化学习(DRL)遇见图神经网络(GNN)

本篇文章是博主在人工智能等领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在学习摘录和笔记专…

day02.数组

一,数组 数组:一组有序的相同类型数据的集合 1.1声明数组: 数组元素类型 数组名【】;数组元素类型【】 数组名; 🎃more : 数组元素类型【】【】数组名;注:Java的数组是先声明对象再分配空间(而C语言是声明数组的同时指明了数组的长度,给数组分配了…

fastadmin采坑之接口分页处理

其实不算fastadmin的代码而是thinkphp自带的分页代码 paginate函数就是自带的分页函数&#xff0c;开始我以为这个只能用于渲染模板不能用于接口&#xff0c;后面看到源代码发现请求参数带page就可以 /*** ApiTitle (获取协会会员)* ApiSummary (获取协会会员)* ApiMethod …

买卖股票的最佳时机系列

//方法一 class Solution { public:int dp[100005];int maxProfit(vector<int>& prices) {//dp[i]表示前i天买入卖出的获取的最大利润//min_val表示前i-1天买入的最小值&#xff1b;dp[0]0;int min_valprices[0];for(int i1;i<prices.size();i){dp[i]max(dp[i-1],…

7.26 作业

1. 完善登录界面 main.c #include "widget.h" #include "second.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();Second s;QObject::connect(&w,&Widget::to_second,&s,…

利用mysqldump实现分库分表备份的shell脚本

一、信息摘要 linux版本&#xff1a;CentOS 7.9 mysql版本&#xff1a;MySQL 5.7.36 脚本实现功能&#xff1a;利用mysqldump工具实现对mysql中的数据库分库备份&#xff0c;和对所备份数据库中的表分表备份 二、shell脚本 #!/bin/bash ######################### #File n…

ROS1ROS2之CmakeList.txt和package.xml用法详解

前言&#xff1a;目前还在学习ROS无人机框架中&#xff0c;&#xff0c;&#xff0c; 更多更新文章详见我的个人博客主页【前往】 文章目录 1. CMakeLists.txt与package.xml的作用2. 生成CMakeLists.txt2.1 ROS12.2 ROS2 3. CMakeLists.txt编写3.1 ROS13.2 ROS2 4. package.xml…

【Linux指令集】---tar指令(超详细)

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【Linux专栏】&#x1f388; 本专栏旨在分享学习Linux的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 演示环境&#xff1…

常见面试题之设计模式--策略模式

1. 概述 先看下面的图片&#xff0c;我们去旅游选择出行模式有很多种&#xff0c;可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 作为一个程序猿&#xff0c;开发需要选择一款开发工具&#xff0c;当然可以进行代码开发的工具有很多&#xff0c;可以选择Idea进行开发&a…

(学习日记)2023.04.30

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…