文章目录

  • OpenCV 图像基础认知与运用
    • 1. OpenCV 简介与安装
      • OpenCV 的优势
      • 安装 OpenCV
    • 2. 图像的基本概念
      • 2.1. 图像的存储格式
      • 2.2. 图像的表示
    • 3. 图像的基本操作
      • 3.1. 创建图像窗口
      • 3.2. 读取与显示图像
      • 3.3. 保存图像
      • 3.4. 图像切片与区域提取
      • 3.5. 图像大小调整
    • 4. 图像绘制与注释
      • 4.1. 绘制直线、圆形和矩形
      • 4.2. 绘制文本
    • 5. 视频处理基础
    • 6. 总结


OpenCV 图像基础认知与运用

在现代计算机视觉领域,OpenCV 是最常用的开源计算机视觉库之一。它为开发者提供了强大的图像处理、计算机视觉和机器学习工具。本文将详细介绍 OpenCV 中图像的基础认知和常见运用方法,包括图像的表示、读取、显示、处理等内容,并拓展相关的知识。


1. OpenCV 简介与安装

OpenCV 是一个开源的计算机视觉库,提供了众多的图像处理和计算机视觉工具。它不仅支持多种编程语言,如 C++、Python 和 Java,还能在多个平台上使用,包括 Windows、Linux 和 macOS。

OpenCV 的优势

  • 开源免费:OpenCV 是一个开源的计算机视觉库,任何人都可以自由使用、修改和分发。
  • 多语言支持:OpenCV 支持多种编程语言,如 Python、C++、Java 等,提供了跨平台支持。
  • 丰富的 API:OpenCV 提供了大量函数接口,涵盖了图像处理、机器学习、特征检测、对象识别等多个领域。

安装 OpenCV

你可以通过以下几种方式安装 OpenCV:

  • 通过 conda 安装

    conda install -c conda-forge opencv
    
  • 通过 pip 安装

    pip install opencv-python
    
  • 通过 pip镜像源 安装(这里提供的是清华的PyPI 镜像源)

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

2. 图像的基本概念

2.1. 图像的存储格式

图像是由 像素 组成的,每个像素存储了图像的颜色、亮度等信息。通常情况下,图像以矩阵的形式存储在计算机中。图像可以是 灰度图像彩色图像,而 OpenCV 中常用的是 8 位图像

  • 灰度图像:二维矩阵,每个元素代表一个灰度值,通常范围是 0-255。
  • 彩色图像:三维矩阵,每个像素由三个颜色通道(R、G、B)构成,每个通道的像素值范围是 0-255。

2.2. 图像的表示

OpenCV 中,图像数据以 numpy 数组的形式表示。对于彩色图像,图像数据是一个三维数组 (height, width, channels),其中:

  • height:图像的高度(行数)
  • width:图像的宽度(列数)
  • channels:图像的颜色通道数,彩色图像有 3 个通道(RGB),灰度图像只有 1 个通道。

3. 图像的基本操作

3.1. 创建图像窗口

在 OpenCV 中,图像窗口用于显示图像。你可以使用 cv2.namedWindow() 函数来创建一个窗口:

cv2.namedWindow("Window Name", cv2.WINDOW_NORMAL)

cv2.WINDOW_NORMAL 允许你调整窗口的大小。

3.2. 读取与显示图像

你可以通过 cv2.imread() 读取图像,并使用 cv2.imshow() 显示图像:

import cv2# 读取图像
img = cv2.imread('image.jpg')# 显示图像
cv2.imshow('Image Window', img)# 等待按键输入,按任意键关闭图像窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cv2.waitKey(0):等待用户按键。
  • cv2.destroyAllWindows():关闭所有显示的窗口。

3.3. 保存图像

保存图像到本地文件:

cv2.imwrite('output_image.jpg', img)

3.4. 图像切片与区域提取

图像切片用于从图像中提取指定的区域。你可以使用切片操作来提取矩形区域:

roi = img[100:200, 150:250]  # 从 (100, 150) 到 (200, 250) 的矩形区域
cv2.imshow('ROI', roi)

确保切片操作的边界在图像尺寸范围内。

3.5. 图像大小调整

使用 cv2.resize() 函数可以调整图像的尺寸:

resized_img = cv2.resize(img, (width, height))
  • widthheight 是目标图像的宽度和高度。

4. 图像绘制与注释

4.1. 绘制直线、圆形和矩形

OpenCV 提供了函数来绘制基本图形,如直线、圆形和矩形。

  • 绘制直线

    cv2.line(img, (start_x, start_y), (end_x, end_y), (255, 0, 0), 2)
    
  • 绘制圆形

    cv2.circle(img, (center_x, center_y), radius, (0, 255, 0), 2)
    
  • 绘制矩形

    cv2.rectangle(img, (top_left_x, top_left_y), (bottom_right_x, bottom_right_y), (0, 0, 255), 2)
    

4.2. 绘制文本

OpenCV 允许你在图像上绘制文本:

cv2.putText(img, 'Hello, OpenCV!', (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2, cv2.LINE_AA)
  • (50, 50):文本起始位置。
  • cv2.FONT_HERSHEY_SIMPLEX:字体类型。
  • 1:字体大小。
  • (0, 255, 0):文本颜色(绿色)。
  • 2:文本粗细。

5. 视频处理基础

OpenCV 还支持视频读取与处理。你可以使用 cv2.VideoCapture() 读取视频文件或摄像头数据,并使用 cap.read() 获取每一帧图像:

cap = cv2.VideoCapture(0)  # 读取摄像头视频while True:ret, frame = cap.read()  # 读取每一帧if not ret:breakcv2.imshow('Video', frame)if cv2.waitKey(1) & 0xFF == ord('q'):  # 按 'q' 键退出breakcap.release()
cv2.destroyAllWindows()
  • cap.read():返回当前帧的图像。
  • cv2.waitKey(1):每 1 毫秒检查一次键盘输入。

6. 总结

本文介绍了 OpenCV 的图像基础知识,并展示了如何使用 OpenCV 进行图像处理和绘制操作。你学习了以下内容:

  • 图像的基本概念:如何表示图像、如何使用 OpenCV 进行图像处理。
  • 图像操作:图像的读取、显示、保存、大小调整、切片等基本操作。
  • 绘图与注释:如何在图像上绘制直线、圆形、矩形以及文本。
  • 视频处理:如何读取和显示视频。

掌握 OpenCV 的这些基础知识,能够帮助你进行图像处理、计算机视觉等任务的实现,并为后续深入学习更复杂的技术打下坚实基础。

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

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

相关文章

Windows电脑添加、修改打印机的IP地址端口的方法

本文介绍在Windows电脑中,为打印机添加、修改IP地址,从而解决电脑能找到打印机、但是无法打印问题的方法。最近,办公室的打印机出现问题——虽然在电脑的打印机列表能找到这个打印机,但是选择打印时,就会显示文档被挂起…

告别复杂配置!Spring Boot优雅集成百度OCR的终极方案

1. 准备工作 1.1 注册百度AI开放平台 访问百度AI开放平台 注册账号并登录 进入控制台 → 文字识别 → 创建应用 记录下API Key和Secret Key 2. 项目配置 2.1 添加依赖 (pom.xml) <dependencies><!-- Spring Boot Web --><dependency><groupId>o…

「iOS」——内存五大分区

UI学习iOS-底层原理 24&#xff1a;内存五大区总览一、栈区&#xff08;Stack&#xff09;1.1 核心特性1.2 优缺点1.3函数栈与栈帧1.3 堆栈溢出风险二、堆区&#xff08;Heap&#xff09;;2.1 核心特性2.2 与栈区对比三、全局 / 静态区&#xff08;Global/Static&#xff09;3.…

每日一题【删除有序数组中的重复项 II】

删除有序数组中的重复项 II思路class Solution { public:int removeDuplicates(vector<int>& nums) {if(nums.size()<2){return nums.size();}int index 2;for (int i 2; i < nums.size();i ) {if(nums[i] ! nums[index-2]) {nums[index]nums[i];}}return ind…

兼容性问题记录

1、dialog设置高度MATCH_PARENT全屏后&#xff0c;三星机型和好像是一加&#xff0c;会带出顶部状态栏&#xff0c;设置隐藏状态栏属性无效。解决方法&#xff1a;高度不设置为MATCH_PARENT&#xff0c;通过windowmanager.getdefaultdisplay来获取并设置高度&#xff0c;再设置…

6.数组和字符串

在C语言中&#xff0c;数组和字符串是基础且重要的概念。它们用于存储和操作一系列相同类型的元素或字符序列。数组1. 数组定义与初始化数组是一系列相同类型的数据项的集合&#xff0c;这些数据项可以通过一个共同的名字来引用。数组中的每个元素都有一个索引&#xff08;也称…

odoo代码分析(一)

Odoo 是一套基于网络的开放式源代码商业应用套件,既可以作为独立应用运行,也可以作为集成的全功能 ERP 系统使用。Odoo 平台采用模块化架构,允许组织根据自身需求起步,并在需求增长时扩展功能。 什么是 Odoo? Odoo 提供了一个完整的商业应用生态系统,包括: 客户关系管…

从“人工眼”到‘智能眼’:EZ-Vision视觉系统如何重构生产线视觉检测精度?

制造业是我国实体经济的基础&#xff0c;是国内经济增长的重要引擎。制造业智能化建设是当下的必然趋势&#xff0c;然而目前依旧有很多中小型企业因为成本原因&#xff0c;无法加快智能化制造的步伐。在智能检测领域更是如此&#xff0c;很多企业依旧在采用人工检测&#xff0…

Etcd原理基础学习

etcd 是一个开源的分布式键值存储系统&#xff0c;专注于提供高可用性、强一致性的数据存储与访问&#xff0c;广泛应用于分布式系统的服务发现、配置管理和协调任务。以下是其核心特性和应用场景的详细介绍。接下来就看看Etcd如何实现服务注册&#xff0c;以及如何通过Raft算法…

【硬件-笔试面试题】硬件/电子工程师,笔试面试题-32,(知识点:模数转换器,信噪比,计算公式,)

目录 1、题目 2、解答 步骤一&#xff1a;明确理想 ADC 的信噪比公式 步骤二&#xff1a;推导公式的来源 步骤三&#xff1a;得出答案 3、相关知识点 一、信噪比&#xff08;SNR&#xff09;的定义 二、理想 ADC 的量化噪声 三、满量程正弦波信号的功率 四、信噪比公…

Redis过期数据的删除策略是什么?有哪些?

定时删除&#xff1a;- 每个设置了TTL的key中都会创建一个计时器&#xff0c;等到过期时间就会立即删除- 对内存友好&#xff0c;但是会占用大量的CPU资源去处理过期数据&#xff0c;从而影响缓存的吞吐量和响应时间惰性删除&#xff1a;- 设置了key的过期后&#xff0c;不会立…

linux dd命令详解

dd 是一个功能强大的 Unix/Linux 命令行工具&#xff0c;用于低级别的字节流操作&#xff0c;常用于创建、复制、转换和处理文件或设备数据。它在 macOS 和 Linux 系统上都可用&#xff0c;但在 macOS 上有一些细微差异。本文将详细讲解 dd 命令的用法&#xff0c;包括参数、常…

多线程同步技术是用于协调多个线程访问共享资源或执行顺序的机制,以避免数据竞争、死锁、线程不安全等问题

多线程同步技术是用于协调多个线程访问共享资源或执行顺序的机制,以避免数据竞争、死锁、线程不安全等问题。 在提供的代码中,存在多线程操作加热板的场景,涉及锁竞争和硬件资源访问,优化多线程同步可以显著提升程序性能和稳定性。 以下是多线程同步技术的详细解释、常见…

CRMEB标准版,从创建数据表到实现最基础增删改查的实现过程

很多使用了CRMEB单商户系统的童鞋在进行二开的时候&#xff0c;都会遇到新建了数据表之后不知道对数据表怎么进行操作。那么&#xff0c;这篇文章将带你完整的实现一遍&#xff0c;以后就不会怕啦。一、创建数据表就以最简单的为例&#xff0c;创建一个学生的信息表编号姓名性别…

J2EE模式---数据访问对象模式

数据访问对象模式基础概念数据访问对象模式&#xff08;Data Access Object Pattern&#xff0c;简称 DAO 模式&#xff09;是一种结构型设计模式&#xff0c;其核心思想是将数据访问逻辑与业务逻辑分离&#xff0c;通过一个抽象层&#xff08;DAO&#xff09;来处理数据的持久…

【OpenCV篇】OpenCV——02day.图像预处理(1)

目录 前言 一、图像色彩空间转换 1 RGB颜色空间 2 颜色加法 3 颜色加权加法 4 HSV颜色空间 5 RGB转Gray(灰度) 二、灰度实验 1 灰度图 2 最大值法 3 平均值法 4 加权均值法 5 两个极端的灰度值 三、图像二值化处理 二值图像 1 阈值法(THRESH_BINARY) 2 反阈值…

经典IDE之Turbo C

写的程序不多&#xff0c;换过的 IDE 不少&#xff0c;本文将列举曾经用过的不同 C 语言相关的 IDE 环境&#xff0c;既是纪念&#xff0c;也是回忆。值得注意的是 IDE 的出现是为了提高开发效率&#xff0c;有一个相对成熟的编译环境和程序。从编程的角度来看&#xff0c;过分…

Go 多模块仓库标签管理教程

为了方便自己开发&#xff0c;自己写了个小工具&#xff1a;DzhGO 代码生成工具 功能特点标题 初始化项目基础结构生成插件模块代码生成模型和实体代码生成服务接口和实现代码支持 admin 和 app 两种模块类型生成项目基础目录 具体介绍看仓库&#xff1a; https://github.co…

IDEA 类上方注释 签名

File -->settings–>Editor–>File and Code Templates–>class新建 Class 类上方添加内容&#xff1a;/*** author Jagger* since ${DATE} ${TIME}*/

卫星通信终端天线对星之:参考星对星

我们在前面的文章中介绍了3种卫星通信终端的对星模式&#xff0c;分别是&#xff1a; 卫星通信终端天线的5种对星模式之一&#xff1a;信标跟踪 卫星通信终端天线的5种对星模式之二&#xff1a;功率检测型载波跟踪 卫星通信终端天线的5种对星模式之二&#xff1a;DVB跟踪 今…