type
status
date
slug
summary
tags
category
icon
password

1. OpenCV 简介

OpenCV 是一个开源的计算机视觉和机器学习软件库,最初由 Intel 发起,现由 Willow Garage 和 Itseez(现为 Intel)共同维护。其核心优势包括:
  • 开源免费:功能全面、无使用费用,社区活跃;
  • 多语言支持:提供 C++、Python、Java 等多种接口;
  • 跨平台:支持 Windows、Linux、macOS、iOS、Android 等操作系统;
  • 丰富 API:内置经典的图像处理和机器学习算法,并支持深度学习框架模型的加载与推理。
其中,OpenCV-Python 是对原生 C++ 接口的高性能封装,它结合了 Python 的易用性和 NumPy 的数值计算优势,让开发者能够用简洁的代码完成高效的图像处理工作。

2. 环境安装

在 Python 环境中安装 OpenCV:

3. 图像的基本表示

3.1像素与位深

  • 像素:图像的最小单位,存储颜色和亮度信息。
  • 位深(Bit Depth:常见的 8 位图像(uint8),每通道像素值范围为 0–255。

3.2颜色空间

  • RGB 三原色:由红(R)、绿(G)、蓝(B)三种颜色通道组成,通过不同比例混合可表示丰富色彩。
  • OpenCV 中,默认使用 BGR 顺序存储彩色图像数据。

4. 图像的存储与读取

OpenCV 中图像以 NumPy 数组形式存在:
  • 彩色图像:三维数组,形状为 (height, width, channels)
  • 灰度图像:二维数组,形状为 (height, width)
  • img.dtype:图像数据类型,如 uint8

5. 图像操作基础

5.1 读取与显示图像

需要使用cv.waitKey(0)来控制窗口显示时长,0表示等待按键,使用cv2.destroyAllWindows()关闭所有窗口。

5.2 保存图像

5.3 创建空白图像

5.4 图像切片与缩放

  • 切片

  • 调整图像大小

6. 在图像上绘制基本图形

6.1 绘制直线、矩形与圆形

7. 视频读取与处理

7.1 捕获摄像头

7.2 读取视频文件

8. 每日一题

题目:1695. 删除子数组的最大得分

给你一个正整数数组 nums ,请你从中删除一个含有 若干不同元素 的子数组删除子数组的 得分 就是子数组各元素之  。
返回 只删除一个 子数组可获得的 最大得分 。
如果数组 b 是数组 a 的一个连续子序列,即如果它等于 a[l],a[l+1],...,a[r] ,那么它就是 a 的一个子数组。
示例 1:
示例 2:
 

解题:

1.看到这个题,其实当场就有想法了,不就是暴力法吗,我用两个for循环,把读取到的数放入num列表中,如果遇到重复的,退出内层循环,计算num的和,取最大值。于是初代代码诞生了
  • 还是太低估了中等题目,超时了。。。。。这些数字看的我头大,还只是1/20。。。
notion image
2.改变策略,在内层循环中,可以从上一次循环的结尾开始,这样就省去了读取前面值的时间
  • 结果直接错误,发现问题所在:假设nums = [4,2,4,5,6]num窗口会变成:先加4,2,遇到4重复,break,只删掉4,实际窗口还残留老的2,窗口不能滑动到“无重复”的状态。
3.再次修改代码,经过上次的问题,发现需要从列表前面开始一直删除到重复的位置,于是V3代码诞生了
  • 再一次超时🤬🤬🤬🤬🤬🤬🤬🤬🤬🤬🤬🤬🤬🤬🤬
  • 总结:sum(num)每次都会重新计算一次,可以优化掉
4.去除sum(num),改用直接计算sum
  • 遇到重复的值就从num头部开始删除里面的值,直到删除到重复的位置,同时对sum进行运算,节约了sum(num)的时间
  • 测试通过,但是时间还是很长,改!!! 🤡🤡🤡🤡🤡🤡🤡🤡
notion image
5.V5版本!问了下ai,发现可以用set()节省while value in num每次查询num中是否有value的时间,再利用双指针确定位置以及对应元素。
  • 当没有重复时,右指针一直往后走,并将读取到的数据加入num,同时sum加上读取的值,如果出现了重复,左指针从开始位置一直删除到重复的位置,同时sum减掉删除的值
  • 终于………成了,不过还不是最优解法,我要躺平了
notion image
  • 看了一下运行时间最快的解法
  • 他使用的是has,问了下ai,以下是set和has的区别:
方案
判重结构
查找/删除
空间复杂度
优缺点
set
set()
O(1)
O(n)
通用,适合大范围数据
has数组
bool[]
O(1)
O(max(nums))
快,常数小,需值小范围
  • set更通用,适合数据值分布广、范围大但实际元素数较少。
  • has数组更快更省常数时间,但需要数值范围较小。适合元素值分布紧凑的场景,比如全是0~10000以内的整数。
8.py-模块化编程概念(模块、包、导入)及常见系统模块总结和第三方模块管理10.py-OpenCV入门:图像处理核心操作全面指南
Loading...