ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

al+大数据每日学习笔记15

al+大数据每日学习笔记15

2026年8月1日星期六

今天学习计算机视觉。

一、计算机视觉定义

计算机视觉(Computer Vision, CV):让计算机模仿人类视觉系统,从图像、视频中获取信息、理解内容;通过算法对画面进行检测、分割、识别、变换等操作。

计算机视觉分为两大分支:

  1. 传统图像处理(经典计算机视觉):人工设计算法与特征规则,无需训练神经网络,代表工具:OpenCV(这次学习的内容)
  2. 基于深度学习的计算机视觉:利用神经网络自动学习图像特征,需要数据集训练,代表方向:图像分类、目标检测、语义分割(YOLO、CNN 等)

二、OpenCV 传统图像处理

1. 图像读取、显示、保存与窗口控制

OpenCV 特性:默认读取彩色图像通道顺序为BGR(普通图片软件、matplotlib 使用 RGB,顺序不一样)

  1. cv2.imread(路径, 读取标识)
    • 默认:加载彩色图像
    • cv2.IMREAD_GRAYSCALE:直接以灰度单通道读取图片
  2. cv2.imshow(窗口名称, 图像数据)创建窗口展示图像
  3. cv2.waitKey(延时ms)
    • 参数 = 0:无限等待按键;大于 0:等待指定毫秒
    • 返回按键 ASCII 码;ESC 按键编码为 27,常用来退出程序
  4. cv2.destroyAllWindows():销毁全部窗口,释放内存资源(规范写法,防止内存占用)
  5. cv2.imwrite(保存路径,图像):将处理后的图像保存到本地

2. 图像基础属性与 ROI 感兴趣区域

图像本质是多维 numpy 数组:

img.shape:(高度 H, 宽度 W, 通道数);灰度图只有 (H,W)

img.size:图像总像素数量

img.dtype:像素数据类型,常规图像为uint8(像素范围 0~255)

ROI 感兴趣区域利用 numpy 切片提取图像局部区域:img[起始高:结束高, 起始宽:结束宽]用途:截取目标区域、局部打码、图片局部叠加。

3. 视频读取操作

cv2.VideoCapture(地址):读取本地视频 / 摄像头

isOpened()判断视频是否成功打开

  1. ret, frame = video.read():逐帧读取画面
    • ret:布尔值,判断是否成功读到帧
    • frame:当前帧图像(和图片格式一致,BGR 数组)
  2. 循环持续读取每一帧,实现视频播放
  3. 程序结束必须调用.release(),释放视频流资源

4. 颜色通道操作、色彩空间转换

彩色图像三维结构[H,W,通道]

[:,:,0]→ B 蓝色通道

[:,:,1]→ G 绿色通道

[:,:,2]→ R 红色通道

通道分离:b,g,r = cv2.split(img)

通道合并:img = cv2.merge((b,g,r))

  1. cv2.cvtColor(图像, 转换模式)色彩空间转换
    • cv2.COLOR_BGR2GRAY:彩色转灰度
    • cv2.COLOR_BGR2RGB:BGR 转为 RGB
    • cv2.COLOR_BGR2HSV:转换到 HSV 空间(常用于颜色筛选)

5. 图像缩放 cv2.resize ()

函数:cv2.resize(src, dsize, fx, fy)

src:原始图像

dsize:(宽度,高度),直接指定输出图像尺寸

fx、fy:水平、垂直方向缩放比例,dsize 设为 None 时生效示例:cv2.resize(img,None,fx=0.5,fy=0.5)图像长宽缩小一半

6. 图像像素算术运算

(1)直接相加img1 + img2

像素求和遵循取模运算,数值超过 255 时:总和 - 256例:260 → 4,画面容易出现异常噪点。

(2)cv2.add(img1,img2)饱和加法

像素相加上限锁定 255,超过 255 直接取 255;图像融合、提亮优先使用该 API

7. 边界填充 cv2.copyMakeBorder ()

作用:在图像上下左右扩充像素边框参数:src, top, bottom, left, right, borderType, value

top/bottom/left/right:四个方向扩充宽度

borderType 填充模式:

cv2.BORDER_CONSTANT填充固定颜色,配合 value 设置颜色

cv2.BORDER_REPLICATE直接复制图像最边缘像素向外延伸

cv2.BORDER_REFLECT镜面反射,包含边界像素镜像复制

cv2.BORDER_REFLECT_101(默认):镜像反射,不重复边界像素,最常用

cv2.BORDER_WRAP循环平铺方式填充

8. 阈值分割 threshold(二值化核心)

函数:ret, dst = cv2.threshold(灰度图, thresh, maxval, type)

thresh:设定阈值

maxval:最大值(仅二值模式生效)返回:ret = 使用的阈值;dst = 处理完成图像

五种阈值模式:

cv2.THRESH_BINARY:大于阈值→maxval,其余置 0

cv2.THRESH_BINARY_INV:反向二值,大于阈值置 0,其余设 maxval

cv2.THRESH_TRUNC:超过阈值统一改为阈值,低于阈值保持原值

cv2.THRESH_TOZERO:低于阈值归零,高于阈值不变

cv2.THRESH_TOZERO_INV:高于阈值归零,低于阈值不变

9. 图像噪声与滤波(平滑去噪)

椒盐噪声

随机在图像生成黑点 (像素 0)、白点 (像素 255) 脉冲噪声。

四类滤波器

均值滤波 cv2.blur ()【线性滤波】邻域内所有像素求平均值,实现画面模糊;无法有效去除椒盐噪声。参数:cv2.blur(图像,(核宽,核高))

方框滤波 cv2.boxFilter ()【线性滤波】

normalize=True:等价均值滤波(求平均)

normalize=False:邻域像素直接求和,容易像素溢出发白

高斯滤波 cv2.GaussianBlur ()【线性滤波】根据像素距离赋予权重,近处像素权重更高,模糊效果更加自然;适合去除高斯噪声。

中值滤波 cv2.medianBlur ()【非线性滤波】邻域像素排序后取中间值;专门消除椒盐噪声

返回列表