一、思路:
(1)主函数 (main
):
- 设置日志级别以隐藏日志信息。
- 定义是否使用摄像头或视频文件的标志,以及视频文件路径。
- 创建并打开视频输入,根据标志选择使用摄像头或视频文件。
- 检查视频是否成功打开,如果失败则打印错误信息并退出。
- 初始化帧计数器、直方图参数和直方图数组。
- 循环读取视频帧,对于每一帧,转换为灰度图像,并更新所选像素的直方图。
- 绘制并显示直方图和当前帧。
- 等待用户按键,如果用户按下ESC键,则退出循环并结束程序。
(2)鼠标响应函数 (on_mouse
):
- 处理鼠标点击事件,当前只处理鼠标左键按下事件。
- 更新全局变量
vP
为鼠标点击的坐标。 - 在鼠标点击的位置上绘制标记,并更新显示图像。
(3)绘制直方图函数 (drawHist
):
- 创建一个用于绘制直方图的空白图像。
- 初始化直方图图像为白色背景。
- 计算直方图数组中的最大值,用于归一化。
- 遍历所有灰度级别,根据直方图数组中的值绘制每个bin的高度。
- 绘制每个bin的矩形,并填充颜色。
(4)创建视频输入函数 (createInput
):
- 根据传入的标志决定是打开摄像头还是视频文件。
- 使用
VideoCapture
类创建视频输入&#