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。。。

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)
的时间
- 测试通过,但是时间还是很长,改!!! 🤡🤡🤡🤡🤡🤡🤡🤡

5.V5版本!问了下ai,发现可以用set()节省
while value in num
每次查询num中是否有value的时间,再利用双指针确定位置以及对应元素。- 当没有重复时,右指针一直往后走,并将读取到的数据加入num,同时sum加上读取的值,如果出现了重复,左指针从开始位置一直删除到重复的位置,同时sum减掉删除的值
- 终于………成了,不过还不是最优解法,我要躺平了

- 看了一下运行时间最快的解法
- 他使用的是has,问了下ai,以下是set和has的区别:
方案 | 判重结构 | 查找/删除 | 空间复杂度 | 优缺点 |
set | set() | O(1) | O(n) | 通用,适合大范围数据 |
has数组 | bool[] | O(1) | O(max(nums)) | 快,常数小,需值小范围 |
- set更通用,适合数据值分布广、范围大但实际元素数较少。
- has数组更快更省常数时间,但需要数值范围较小。适合元素值分布紧凑的场景,比如全是0~10000以内的整数。
- 作者:sisui
- 链接:https://www.sisui.me//article/py-opencv-basics-computer-vision-leetcode1695
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章