在计算机视觉领域,OpenCV 无疑是最受欢迎的开源库之一。它由 Intel 公司俄罗斯团队发起,如今已成为处理图像和视频的强大工具。本文我会介绍OpenCV 的基础知识,从图像的读写显示到实时视频流处理,迈出计算机视觉的第一步。

目录

OpenCV 为何值得学习?

图像的基本操作

读取、显示与保存图像

图像的像素操作

绘制几何图形

实时视频流处理

总结


OpenCV 为何值得学习?

OpenCV 之所以被广泛应用,得益于其三大优势:

首先是多语言支持,虽然基于 C++ 实现,但提供了 Python、Ruby、Matlab 等多种语言接口,其中 OpenCV-Python 结合了 C++ 的高性能和 Python 的简洁易读性。

其次是跨平台特性,可在 Windows、Linux、OS X、Android 和 iOS 等系统上运行,甚至支持基于 CUDA 和 OpenCL 的 GPU 加速。

最后是丰富的 API,涵盖了传统计算机视觉算法、主流机器学习算法,还添加了对深度学习的支持,满足各种视觉处理需求。

对于 Python 开发者来说,安装 OpenCV 非常简单,使用国内镜像源可快速完成:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python

图像的基本操作

读取、显示与保存图像

处理图像的第一步是掌握基本的 IO 操作。OpenCV 提供了简洁的接口完成这些任务:

import cv2
import numpy as np# 读取图像(默认彩色模式)
img = cv2.imread('image.jpg')# 显示图像
cv2.imshow("Image Window", img)
# 等待用户按键(0表示无限等待)
cv2.waitKey(0)
# 关闭所有窗口
cv2.destroyAllWindows()# 保存图像
cv2.imwrite("saved_image.jpg", img)

需要注意的是,cv2.waitKey()是显示图像不可或缺的部分,它给图像绘制留下时间,API里面填写的为多少毫秒,否则窗口可能无响应。

图像的像素操作

在计算机中,图像由像素组成。彩色图像通常由 RGB(红、绿、蓝)三个通道构成,每个通道的像素值范围是 0-255。在OpenCV中使用的BGR通道,我们可以直接操作像素值:

# 获取某个像素点的值(BGR格式,注意与RGB顺序不同)
px = img[100, 100]
print(px)  # 输出 [B, G, R] 值# 修改像素值(设置为红色)
img[100, 100] = [0, 0, 255]

绘制几何图形

OpenCV 提供了绘制各种几何图形的函数,方便我们在图像上添加标记:

# 绘制直线(起点、终点、蓝色、线宽2)
cv2.line(img, (100, 100), (200, 200), (255, 0, 0), 2)# 绘制圆形(圆心、半径50、黄颜色、线宽2)
cv2.circle(img, (300, 300), 50, (0, 255, 255), 2)# 绘制矩形(左上角、右下角、蓝色、线宽2)
cv2.rectangle(img, (100, 200), (300, 300), (255, 0, 0), 2)# 添加文字(内容、位置、字体、大小、青蓝色、线宽4、抗锯齿)
cv2.putText(img, 'Hello OpenCV', (100, 200), cv2.FONT_ITALIC, 1, (255, 255, 0), 4, cv2.LINE_AA)

注意:在OpenCV中添加文字无法使用中文字符,会显示乱码,所以实际中常使用三大库中的matplotlib来实现添加中文字符。
 

实时视频流处理

除了静态图像,OpenCV 还能轻松处理实时视频流。通过电脑摄像头捕获视频的代码如下:

import cv2# 创建VideoCapture对象,参数0表示使用默认摄像头
cap = cv2.VideoCapture(0)while True:# 读取一帧视频(ret为是否成功读取的标志,frame为帧数据)ret, frame = cap.read()# 如果读取失败则退出循环if not ret:break# 在这里可以添加对帧的处理(如灰度化、绘制图形等)# 示例:转为灰度图gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 显示处理后的帧cv2.imshow('Camera Feed', gray_frame)# 按'q'键退出循环if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头资源并关闭所有窗口
cap.release()
cv2.destroyAllWindows()

这段代码的核心是VideoCapture类,它负责从摄像头获取视频流。通过循环不断读取帧并处理,实现实时视频处理的效果。参数为0表示使用默认摄像头,也可以传入视频所在地址。

waitKey(1)确保每帧之间有 1 毫秒的延迟,既保证视频流畅,又能检测按键输入。

总结

本文我介绍了 OpenCV 的基本操作,包括图像的读写显示、像素操作、几何图形绘制以及实时视频流处理。这些基础操作是进行更复杂计算机视觉任务的基石,例如目标检测、图像分割等。

OpenCV 的强大之处在于它将复杂的视觉算法封装成简单易用的接口,让开发者可以专注于业务逻辑而非底层实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/90835.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/90835.shtml
英文地址,请注明出处:http://en.pswp.cn/web/90835.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大语言模型 LLM 通过 Excel 知识库 增强日志分析,根因分析能力的技术方案(3):使用云平台最小外部依赖方案

文章大纲 1 方案总览(与官方文档映射) 2 环境准备(一步完成) 3 数据层(零代码迁移 Excel → BigQuery 或 SQLite) 4 函数声明(JSON Schema 与官方示例一致) 5 Cloud Function(**最小外部依赖**) 6 客户端调用(对齐官方 Python 示例) 7 Token 与性能对比(官方计费口…

C++高效实现轨迹规划、自动泊车、RTS游戏、战术迂回包抄、空中轨迹、手术机器人、KD树

C++ 算法汇总 基于C++的城市道路场景 以下是基于C++的城市道路场景中车辆紧急变道轨迹生成的实现方法和示例代码。内容涵盖轨迹规划算法、数学建模及代码实现,适用于自动驾驶或驾驶辅助系统开发。 基于多项式曲线的轨迹生成 采用五次多项式(Quintic Polynomial)生成平滑…

电动汽车转向系统及其工作原理

电动汽车的转向系统作为电动汽车的一个关键系统,与燃油车的转向系统有着较大差异。电动汽车的转向系统主要分为 电动助力转向(EPS, Electric Power Steering) 、电动液压助力转向系统(EHPS, Electro-Hydraulic Power Steering&…

TCP/IP 体系结构网络接口层的原理

TCP/IP 网络接口层详解 网络接口层(Network Interface Layer)是 TCP/IP 模型的最底层(对应 OSI 模型的物理层 数据链路层),负责在物理网络中传输原始比特流,实现相邻设备之间的可靠数据传输。核心功能物理…

笔记本键盘的启用和禁用

管理员 打开 CMD:这一步要求以管理员权限打开命令提示符(Command Prompt)。在Windows系统中,可以通过搜索“cmd”,然后右键选择“以管理员身份运行”来实现。sc config i8042prt start disabled (关闭笔记本键盘)&…

vue3的一些浅显用法

1/ 父页面调用子页面相关需要在父页面引用 <FieldUserForm ref"userFormRef" success"handleUserFormSuccess" />其中 FieldUserForm 是子页面 success"handleUserFormSuccess" 是子页面成功后回调方法 父页面 实现 handleUserFormSucces…

C语言习题讲解-第五讲-循环编程练习等

C语言习题讲解-第五讲-循环编程练习等1. 关于一维数组描述不正确的是&#xff1a;( )2. 关于一维数组初始化&#xff0c;下面哪个定义是错误的&#xff1f;&#xff08; &#xff09;3. 定义了一维 int 型数组 a[10] 后&#xff0c;下面错误的引用是&#xff1a;&#xff08; &…

MongoDB索引及其原理

目录 索引原理 索引类型 单键索引 组合索引 特性索引 唯一索引 稀疏索引 部分索引 TTL索引 多键索引 文本索引 地理空间索引 哈希索引 总结 MongoDB 索引执行计划 索引原理 MongoDB索引的背后的原理和MySQL中的索引原理是差不多的,都是使用B数来对数据进行管理…

学习嵌入式的第三十三天-数据结构-(2025.7.25)服务器/多客户端模型

服务器/多客户端模型循环服务器 while(1){ accept(); recv(); } 适用于简单任务&#xff0c;如基础Web服务器&#xff0c;但无法处理并发请求。并发服务器 通过thread或fork实现多任务处理。需注意子进程/线程的资源回收&#xff0c;避免内存泄漏。多路IO模型服务器 使用select…

【Canvas与标牌】优质资产六角星标牌

【成图】【代码】<!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>优质资产六角星标记 Draft1</title><style type"text/cs…

扫雷游戏开发教程:从零打造精美像素扫雷

完整源码在本文结尾处一、游戏概述 扫雷是一款经典的益智游戏&#xff0c;玩家需要在不触发地雷的情况下揭开所有安全格子。本教程将带你从零开始开发一个具有精美界面和动画效果的扫雷游戏&#xff0c;包含难度选择、棋盘大小调整等高级功能。 二、游戏核心功能 三种难度级别&…

Linux驱动开发笔记(五)——设备树(上)

内容详见《【正点原子】I.MX6U嵌入式Linux驱动开发指南》四十三章 开发板&#xff1a;imx6ull mini 虚拟机&#xff1a;VMware17 ubuntu&#xff1a;ubuntu20.04 一、什么是设备树 视频&#xff1a;第6.1讲 Linux设备树详解-什么是设备树&#xff1f;_哔哩哔哩_bilibili 对…

【QT入门到晋级】window opencv安装及引入qtcreator(包含两种qt编译器:MSVC和MinGW)

前言 本文主要分享QT的两种编译器环境&#xff08;MSVC和MinGW&#xff09;下&#xff0c;安装及引入opencv的方法。 编译器区别 特性​​​​MSVC​​​​MinGW​​​​编译器类型​​微软专有编译器&#xff08;cl.exe&#xff09;基于GCC的开源工具链​​平台支持​​仅Wi…

字节跳动Coze Studio开源了!架构解析

Coze Studio 是字节跳动推出的一款 AI 应用开发平台&#xff0c;专注于帮助开发者快速构建、测试和部署基于大语言模型的智能应用。其整体架构围绕“低代码开发 AI 应用”的核心目标设计&#xff0c;融合了模型能力、工具集成、流程编排和多端部署等功能。以下是其整体架构的详…

Claude 4.0 终极编程指南:模型对比、API配置与IDE集成实战

Claude 4.0 终极编程指南&#xff1a;模型对比、API配置与IDE集成实战 基于官方文档及可验证数据源&#xff08;2025年7月更新&#xff09; 1 Claude 4.0 技术解析&#xff1a;对比竞品的核心优势与局限 1.1 官方性能数据&#xff08;来源&#xff1a;Anthropic技术白皮书&…

优化:Toc小程序猜你喜欢功能

引言&#xff1a;来自自创的小程序中热点接口&#xff0c;本小程序专为在校学生自提点餐使用 一、功能描述 该功能作为一个推荐的职责&#xff0c;根据用户最近行为给用户推荐用户可能喜欢去吃的店铺&#xff0c;可能比较简洁&#xff0c;但是需要设计的方面挺多的&#xff0c…

Datawhale AI 夏令营:让AI理解列车排期表 Notebook(Baseline拆解)

Step1、读取数据 import pandas as pd import requests import re import json from tqdm import tqdm# 读取数据 data pd.read_excel(data/info_table.xlsx) data data.fillna(无数据) dataStep2、注册硅基流动https://cloud.siliconflow.cnQwen/Qwen3-8B 模型可以免费使用&…

vue写的app设置角标

原生App角标&#xff08;UniApp示例&#xff09;调用plus.runtime.setBadgeNumber方法设置安卓/iOS角标&#xff1a;javascriptCopy Code// 设置角标 plus.runtime.setBadgeNumber(99); // 清除角标&#xff08;部分平台需特殊处理&#xff09; plus.runtime.setBadgeNumber(0)…

GAN/cGAN中到底要不要注入噪声

MelGAN论文MelGAN针对的是从mel谱生成语音&#xff0c;里面说当条件很强的时候&#xff0c;随机噪声就没啥用了&#xff0c;因此没将noise注入到生成器中&#xff1b;运用的判别器也仅有1个输入&#xff0c;不是cGAN的形式image-to-image translation with conditional adversa…

备份一下我的 mac mini 的环境变量配置情况

export PATH“/opt/homebrew/bin:$PATH” #THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!! export SDKMAN_DIR“HOME/.sdkman"[[−s"HOME/.sdkman" [[ -s "HOME/.sdkman"[[−s"HOME/.sdkman/bin/sdkman-init.sh” ]] && so…