当前位置: 首页 > ds >正文

1:OpenCV—图像基础

OpenCV教程

头文件

您只需要在程序中包含 opencv2/opencv.hpp 头文件。该头文件将包含应用程序的所有其他必需头文件。因此,您不再需要费心考虑程序应包含哪些头文件。
例如 -

#include <opencv2/opencv.hpp>

命名空间

所有 OpenCV 类和函数都在 cv 命名空间中。因此,您必须执行以下操作之一

  • 在包含头文件之后添加使用命名空间 cv
    例如 -

#include <opencv2/opencv.hpp>
using namespace cv;int main(int argc, char** argv) 
{ // Read the image file Mat image = imread("D:/My OpenCV Website/Eagle.jpg"); return 0; 
}
  • 在源代码中每个 OpenCV 类、函数和数据结构的开头附加 cv:: 说明符

例如


#include <opencv2/opencv.hpp> int main(int argc, char** argv) 
{ // Read the image file cv::Mat image = cv::imread("D:/My OpenCV Website/Eagle.jpg"); return 0; 
}

数组的数据类型

数组的数据类型定义通道数、为每个元素分配的位数以及如何使用这些位表示元素的值。如果数组表示图像,则数组的每个元素都是图像的像素。

任何单个通道数组都应属于以下数据类型之一。
- CV_8U - 8位无符号整数
- CV_8S - 8位有符号整数
- CV_16U - 16位无符号整数
- CV_16S - 16位有符号整数
- CV_32S - 32位有符号整数
- CV_32F - 32位浮点数
- CV_64F - 64位浮点数

在这里,我说明了一个数据类型为CV_8U的数组。它有一个频道。通道中的每个元素都是 8 位无符号整数。因此,每个元素的值范围应介于 0 到 255 之间。单通道阵列的一个常见类比示例是黑白图像。(像素值 0 表示黑色,255 表示白色。介于 0 和 255 之间的像素值表示介于黑色和白色之间的颜色。

我们可以为多通道数组定义上述所有数据类型。OpenCV支持多达512个通道。在这里,我将向您展示如何定义多通道数组CV_8U数据类型。

  • CV_8UC1 - 具有 8 位无符号整数的单通道数组,与 CV_8U 完全相同
  • CV_8UC2 - 2 个通道数组,带 8 位无符号整数
  • CV_8UC3 - 3 个通道数组,带 8 位无符号整数
  • CV_8UC4 - 4 个通道数组,带 8 位无符号整数
  • CV_8UC(n) - 具有 8 位无符号整数的 n 通道数组(n 可以从 1 到 512) )

同样,您可以使用任何其他单渠道数据类型派生多通道数据类型。(例如 - CV_16SC3、CV_32FC4、CV_64FC(27) 等)

示例 1:

在这里,我说明了一个数据类型为 CV_8UC3 的数组。它有3个通道。每个通道中的每个元素都是 8 位无符号整数。因此,每个元素的值范围应介于 0 到 255 之间。因为这是一个 3 通道数组,所以数组由具有 3 个元素的元组组成。第一个元组是 {54, 0, 34},第二个元组是 {58, 78, 185},依此类推。3通道阵列的一个常见类比示例是由红色,绿色和蓝色通道组成的RGB图像。

数据类型CV_8UC3的数组

示例 2:

在这里,我说明了一个数据类型为 CV_8SC2 的数组。它有2个通道。每个通道中的每个元素都是 8 位有符号整数。因此,每个元素的值范围应为 -128 到 127。因为这是一个 2 通道数组,所以数组由具有 2 个元素的元组组成。第一个元组是 {-85, -127},第二个元组是 {25, 23},依此类推。

数据类型CV_8SC2的数组

示例用法 :

  • Mat img1(3, 5, CV_32F );创建具有 3 位浮点数的 5 x 32 单通道数组
  • Mat img2(23, 53, CV_64FC(5) );创建具有 23 位浮点数的 53 x 5 64 通道数组
  • Mat img3(尺寸(100, 200), CV_16UC2 );100 x 200 2 通道数组,带 16 位无符号整数

注意:

  1. 您应该很明显以下 3 种数据类型完全相同。
      • CV_8U
    • CV_8UC1
    • CV_8UC(1)
  2. 尽管CV_32FC4是有效的数据类型,但CV_32FC5不是有效的数据类型。对于包含 4 个以上通道的阵列,应使用括号将通道号括起来。例如 - CV_32FC(5)。

  3. 某些 OpenCV 函数只能处理上述数据类型的子集。因此,请在使用 OpenCV 函数之前阅读文档。

对图像深度和通道的一些见解

任何数字图像都由像素组成。每个像素都应该有一些价值。像素的最小值为 0,它表示黑色。当像素的值增加时,该像素的强度也会增加。可以为像素分配的最大值取决于为每个像素分配的位数。如果为每个像素分配的位数为 8,则该像素的最大值为 255(二进制11111111)

现在什么是图像的深度?**图像深度表示为每个像素分配的位数。如果为 8,则每个像素的值可以介于 0 和 255 之间。**如果为 4,则每个像素的值可以介于 0 到 15 之间(二进制为 1111)。

灰度图像

这是一个深度为 8 (2^8)位的图像的简单模型。每个小框代表一个像素。因此,每个框可能包含一个介于 0 到 255 之间的值。

这是上图的一些重要属性。

  • 图像深度为 8 位。
  • 图像由单通道组成。
  • 图像的高度为 4 像素。
  • 图像的宽度为 5 像素。
  • 此图像的分辨率为 5 x 4。

这是一个灰度图像(黑白图像),因为它只包含一个通道。因此,此图像不包含任何颜色信息。如果此像素的值更高,则会显示得更亮。如果该值较低,则会显示得更暗。

彩色图像

下图是彩色图像的简单模型。彩色图像应至少由 3 个平面组成;红色、绿色和蓝色。任何像素都是这三个值的组合。通过组合这 3 种基本颜色可以创建任何颜色。

例子

  • (255, 0, 0) 代表纯红色。 R
  • (0, 255, 0) 代表纯绿色。 G
  • (0, 0, 255) 表示纯蓝色。 B
  • (255,0,255) 代表纯违规。

在上图中,左上角像素为(23,231,46)。它将显示为绿色,因为该像素的绿色值 (231) 明显大于红色 (23) 和蓝色 (46) 值。

这是上图的一些重要属性。

  • 图像深度为 24 位。(因为每个像素用 8 x 3 位(每个通道 8 位)表示)
  • 图像由 3 个通道组成。
  • 图像的高度为 4 像素。
  • 图像的宽度为 5 像素。
  • 此图像的分辨率为 5 x 4。

注意-

OpenCV库函数通常读取BGR格式的图像,这意味着蓝色平面在前,绿色平面在后,红色平面在末尾,这与上述图像的顺序完全相反。

http://www.xdnf.cn/news/6546.html

相关文章:

  • python打卡day26
  • 【开源Agent框架】OWL:面向现实任务自动化的多智能体协作框架深度解析
  • 从代码学习深度学习 - 风格迁移 PyTorch版
  • 中国科学院计算所:从 NFS 到 JuiceFS,大模型训推平台存储演进之路
  • 【知识点】大模型面试题汇总(持续更新)
  • SQLPub:一个提供AI助手的免费MySQL数据库服务
  • 智慧化系统安全分析报告
  • AI学习博文链接
  • 12V升24V升压恒压WT3207
  • YOLO格式数据集制作以及训练
  • c++多态面试题之(析构函数与虚函数)
  • 工业操作系统核心技术揭秘
  • sizeof()运算符
  • 嵌入式学习笔记 D21:双向链表的基本操作
  • 系统集成项目管理工程师学习笔记
  • 【日撸 Java 三百行】Day 16(递归)
  • Ubnutu ADB 无法识别设备的解决方法
  • 数据库的锁 - 全局锁、表锁、行锁
  • Vuex和Vue的区别
  • RabbitMQ概述
  • 【ArcGIS技巧】根据地块、界址点图层生成界址线
  • 如何在Edge浏览器里-安装梦精灵AI提示词管理工具
  • MySQL数据类型之VARCHAR和CHAR使用详解
  • 基于大模型预测围术期麻醉苏醒时间的技术方案
  • Ubuntu 安装 Redis
  • 《Adversarial Sticker: A Stealthy Attack Method in the Physical World》论文分享(侵删)
  • A2O娱乐李秀满纪录片首映礼,A2O MAY、少女时代、崔始源、泰民齐聚祝贺
  • 脚本语言Lua
  • 使用PEFT库将原始模型与LoRA权重合并
  • 视频分辨率增强与自动补帧