当前位置: 首页 > news >正文

【菜狗学编程】opencv、numpy简单基础——20251011

1. Numpy基础知识

1.1 Numpy简介

Numpy是科学计算的基础包,提供了一个多维数组对象(ndarray)。其核心是ndarray对象,用于处理相同数据类型的n维数组。Numpy是Python中进行数值计算的强大工具,广泛应用于数据分析、机器学习等领域。

Numpy与Python列表的区别:

  1. 大小:Numpy数组在创建时有固定的大小,而Python列表可以动态调整大小。

  2. 数据类型:Numpy数组中的元素必须是相同的数据类型,而Python列表可以包含不同类型的元素。

  3. 运算性能:Numpy能够高效地对大量数据进行数学运算,速度远快于Python列表。

1.2 Numpy基本概念

  • 轴(Axis):指数组的维度。例如,二维数组的行和列分别是不同的轴。

  • 秩(Rank):指数组的轴的个数。一个二维数组的秩为2。

  • ndarray对象:Numpy的核心数据结构,代表n维数组。

常用ndarray属性:

  • ndarray.ndim:数组的维度数。

  • ndarray.shape:数组的形状(例如,二维数组的形状为(行数, 列数))。

  • ndarray.size:数组中元素的总数。

  • ndarray.dtype:数组元素的数据类型。

  • ndarray.itemsize:数组中每个元素的字节大小。

  • ndarray.data:数组元素的缓冲区。

1.3 创建数组

  • 使用np.array()从Python列表或元组创建数组。

    b = np.array([2, 3, 4])

  • np.zeros():创建一个元素全为0的数组。

    np.zeros((3, 4))

  • np.ones():创建一个元素全为1的数组。

    np.ones((2, 3, 4), dtype=np.int16)

  • np.arange():创建一个按给定步长的数组。

    np.arange(10, 30, 5) # 生成包含10, 15, 20, 25的数组

  • np.linspace():生成指定区间内的均匀分布的数组。

    np.linspace(0, 2, 9) # 生成从0到2的9个数

1.4 基本运算

  • *:元素逐一相乘(对应位置的元素相乘)。

  • np.dot():矩阵乘法,行与列相乘。

np.random.rand(2, 2) # 生成一个服从均匀分布的数组
np.random.randn(2, 2) # 生成一个服从标准正态分布的数组

常用操作:

  • a.sum():对数组所有元素求和。

  • a.min():找最小值。
  • a.max():找最大值。

  • b.sum(axis=0):按列求和。

  • b.cumsum(axis=1):按行计算累计和。

1.5 索引、切片与迭代

  • 索引:直接通过索引操作访问数组元素。

a = np.arange(10)**3
a[:6:2] = 50  # 每隔一个元素赋值为50
a[::-1]  # 反转数组
  • 切片:使用i = np.array([1, 1, 3, 8, 5]),通过数组索引访问元素。
a[i]
  • 迭代:使用np.frompyfunc()将Python函数转化为矢量化函数。
def func(x, y): return x + y
np.frompyfunc(func, 2, 1)  # 变为矢量化函数

1.6 更改数组形状

  • a.shape:获取数组的形状。

  • a.ravel():返回一维数组。

  • a.reshape(3, -1):将数组重塑为3行,列数自动推断。

  • a.T:返回数组的转置。

1.7 数组的组合与拆分

  • np.hstack():按水平方向(列方向)组合数组。

  • np.vstack():按垂直方向(行方向)组合数组。

  • np.column_stack():将多个一维数组按列对齐组合为二维数组。

np.column_stack((a, b))
np.hsplit(a, 3)  # 沿水平方向切分
np.vsplit(a, 3)  # 沿垂直方向切分

   numpy中np.diff(series)计算数组中相邻元素之间的差分。它支持多次差分计算以及沿指定轴进行操作。

import numpy as np# 一维数组差分
arr = np.array([1, 3, 10])
result = np.diff(arr)
print(result) # 输出: [2 7]# 二维数组沿不同轴差分
arr_2d = np.array([[1, 3, 6], [4, 9, 15]])
result_axis0 = np.diff(arr_2d, axis=0)
result_axis1 = np.diff(arr_2d, axis=1)
print(result_axis0) # 输出: [[3 6 9]]
print(result_axis1) # 输出: [[2 3] [5 6]]

2. Pandas的DataFrame

2.1 DataFrame简介

Pandas的DataFrame是一个二维标签数据结构,可以看作是一个表格。它的每一行和每一列都有标签,适合处理和分析结构化数据。

2.2 DataFrame常用操作

  • 文件读写、查看信息、条件索引

df = pd.read_csv('file.csv')  # 读取csv文件
df.to_csv('output.csv')  # 输出为csv文件
df.info()  # 查看DataFrame的信息
df.loc[df['column'] > 10]  # 过滤出符合条件的行

3. OpenCV基础

3.1 图像导入与显示

  • 导入OpenCV库并加载图像:

import cv2
image = cv2.imread('image.jpg')
cv2.imshow('Window', image)  # 显示图像
cv2.waitKey(0)  # 等待按键

3.2 图像处理

  • 图像裁剪

crop = image[10:170, 40:200]  # 裁剪图像
  • 绘制图形
cv2.line(image, (100, 200), (250, 250), (250, 0, 0), 2)  # 画线
cv2.rectangle(image, (30, 100), (60, 150), (0, 255, 0), 2)  # 画矩形
cv2.circle(image, (150, 100), 20, (0, 0, 255), 3)  # 画圆
cv2.putText(image, "hello", (100, 50), 0, 1, (255, 255, 255), 2, 1)  # 添加文本

3.3 均值滤波与高斯滤波

  • 使用高斯滤波器:

gauss = cv2.GaussianBlur(image, (5, 5), 0)
  • 使用均值滤波器:
median = cv2.medianBlur(image, 5)

3.4 特征提取

  • 转换为灰度图:

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  • 获取特征点:
corners = cv2.goodFeaturesToTrack(gray, 500, 0.1, 10)
for corner in corners:x, y = corner.ravel()cv2.circle(image, (int(x), int(y)), 3, (255, 0, 255), -1)

3.5 模板匹配

  • 查找图像中的菱形:

template = gray[75:105, 235:265]
match = cv2.matchTemplate(gray, template, cv2.TM_CCOEFF_NORMED)
locations = np.where(match >= 0.9)

pytorch一些知识点

os.listdir()

        用于列出指定路径下的所有文件和文件夹名称。

        返回一个包含指定目录下所有文件和文件夹名称的列表(list)。

PIL.Image.open(renders_dir / fname)

        用 PIL.Image.open() 打开 renders_dir 目录下的 fname 文件。

tf.to_tensor(render)

        将render图像对象转换为tensor张量。

.unsqueeze(0)[:, :3, :, :]

        在第 0 维增加一个 batch 维度,符合 PyTorch 神经网络输入格式,即批量维度 B × C × H × W。确保第二维度通道channel只取RGB三个通道。

sorted(...)

        对文件名进行排序(确保按照顺序读取深度图像)

torch.gradient(tensor, dim=N)

        计算 tensor 在第 dim=N 维度上的梯度。dim=1 表示 x 方向(水平)梯度 dxdim=0 表示 y 方向(垂直)梯度 dy

-torch.ones_like(dx[0])

        生成一个与 dx[0] 形状相同的全 -1 Tensor,表示 Z 方向的分量。

torch.stack(..., dim=0)

        将三个通道堆叠起来,形成 (3, H, W) 形状的 normal_map,每个像素点包含 (dx, dy, -1) 三个分量。

torch.norm(normal_map, dim=-1, keepdim=True)

沿着最后一维度dim=-1,对于normal_map计算二范数norm

normal_map / norm

from pathlib import Path# 假设 scene_dir 是某个场景的目录路径
scene_dir = '/path/to/scene'
scene_path = Path(scene_dir)

        Path就是这个的路径。

zip()

        将序列打包成一个元组序列。

torch.median()

        计算输入张量的中位数。

"{:>12.7f}".format(value)
  • {}:占位符
  • ::格式说明符的起始
  • >右对齐
  • 12总宽度(包括小数点和小数部分)
  • .7f保留 7 位小数的浮点数

——小狗照亮每一天

20251011

http://www.dtcms.com/a/594563.html

相关文章:

  • 网站开发一个模板费用优惠券网站要怎么做的
  • 做cra需要关注的网站国际物流网站建设
  • Linux 文件
  • MCU 内存栈介绍和内存段
  • 如何配置Dev-C++的环境变量到系统路径?
  • 在网站和网页的区别哪里有培训网
  • 洪梅网站建设网站开发所需费用支出有哪些
  • 个人网站首页模板彩票网站开发演示
  • 企业网站未来发展趋势网站推广怎么推广
  • 芯伯乐3A降压稳压器XBLW LM2576/LM2596:高效、高可靠性开关电源解决方案
  • 30V N 沟道 MOSFET SP30N03BNK 规格解析与应用场景详解
  • JSON格式爬取淘宝/1688/京东商品详情API接口实战指南
  • 网站搭建推广优化知乎网页版
  • 02-Git Echarts
  • 网站 建设 申请报告广东专业网站优化制作公司
  • Kubernetes 第三章:深入掌握pod-基础
  • 介绍 一下 Pi3 (π³) 算法:排列等变视觉几何学习
  • 短网址生成站长工具网络推广和竞价怎么做
  • 个人主页空间申请新乡网站seo优化
  • vue弹出是否继续操作
  • 学校网站建设钉钉花桥网站建设
  • 网站微商城的建设网站关键词建设
  • 企业网站建设的原则做公众号一个月挣多少钱
  • yum 源无法访问及DNS 解析失败问题
  • 咸阳网站开发wordpress作者插件
  • STM32配置注意事项
  • 做中国菜的外国网站网站建设与设计ppt模板下载
  • 东莞模板网站制作哪家好江苏省造价信息工程网
  • 常用数学函数详解:从基础运算到图形学应用
  • 杭州网站改版公司兰州网站设计公司排名