首页 > 其他分享 >OpenCV4 :基础图像处理与操作(一)

OpenCV4 :基础图像处理与操作(一)

时间:2023-10-26 10:02:12浏览次数:36  
标签:Mat image 色彩 图像处理 result OpenCV4 图像 操作 cv


OpenCV4 :基础图像处理与操作(一)

目录

  1. 图像的基本概念与术语
  • 图像表示
  • 基础术语
  1. 图像读取与显示方法
  • C++ 示例
  1. 色彩空间的理解与转换
  • 色彩空间
  • RGB(红绿蓝)
  • CMYK(青色、黄色、品红、黑色)
  • HSV(色相、饱和度、明度)
  • 色彩转换
  1. 图像对象的创建与赋值
  • C++ 示例
  1. 基础图像操作:像素读写与算术运算
  • 像素读写
  • 算术运算

本文详细介绍了使用 OpenCV4 进行图像处理的基础知识和操作。内容包括图像的基础概念、色彩空间理解、以及如何在 C++ 中进行图像读取、显示和基础操作。

1. 图像的基本概念与术语

图像表示

在计算机视觉中,图像通常表示为一个二维或三维的数组。二维数组表示灰度图像,其中每个元素代表一个像素的亮度。三维数组表示彩色图像,通常使用 RGB(红、绿、蓝)色彩模型。

基础术语
  • 像素(Pixel):图像的基本单位。
  • 分辨率(Resolution):图像的宽度和高度(例如,1920x1080)。
  • 位深度(Bit Depth):每个像素可以使用的色彩范围(例如,8位表示256种可能的值)。

2. 图像读取与显示方法

在 OpenCV 中,图像可以容易地读取和显示。

C++ 示例
#include <opencv2/opencv.hpp>

int main() {
    cv::Mat image = cv::imread("image.jpg");

    cv::imshow("Image", image);
    cv::waitKey(0);
    return 0;
}

3. 色彩空间的理解与转换

色彩空间

色彩空间是用数学的方式描述色彩的模型或系统。这些模型或系统通常被用于各种应用,包括图像处理、视频编码、打印和数字艺术等。常见的色彩空间有 RGB、HSV、CMYK 等。

OpenCV4 :基础图像处理与操作(一)_图像处理

RGB(红绿蓝)
  • 由来:RGB 色彩模型的由来主要是基于人类视觉系统对红、绿、蓝三种基础色彩的感知能力。因为这三种颜色可以组合生成大多数可见光谱中的颜色,所以它们被选为基础色。
  • 用途:RGB 主要用于各种显示设备(如电视、电脑屏幕、手机屏幕等)、图像和视频编码。在这些应用中,红绿蓝三种色光以不同比例混合,从而产生各种各样的颜色。
CMYK(青色、黄色、品红、黑色)
  • 由来:CMYK 色彩模型是为印刷工业设计的。与 RGB 不同,它是一种减色模型。这意味着,在纸上叠加更多的墨水会使颜色变暗,直至变成黑色。
  • 用途:CMYK 主要用于彩色印刷。由于印刷过程中使用的是墨水,所以需要使用减色模型。
HSV(色相、饱和度、明度)
  • 由来:HSV 色彩模型是为了更符合人类对色彩感知的方式而设计的。与 RGB 和 CMYK 相比,HSV 更容易让人直观地理解色彩的属性。
  • 用途:HSV 常用于图像处理、图形设计和数字艺术等领域,因为它更容易模拟颜色的混合和渐变效果。
色彩转换

在 OpenCV 中,色彩转换可以使用 cvtColor 函数实现。

C++ 示例
cv::Mat gray_image;
cv::cvtColor(image, gray_image, cv::COLOR_BGR2GRAY);

参考:OpenCV: Color Space Conversions


4. 图像对象的创建与赋值

在 OpenCV 中,cv::Mat(C++)用于表示图像。

C++ 示例
cv::Mat blank_image(512, 512, CV_8UC3, cv::Scalar(0,0,0));

5. 基础图像操作:像素读写与算术运算

像素读写
C++ 示例
cv::Vec3b pixel_value = image.at<cv::Vec3b>(50, 50);
image.at<cv::Vec3b>(50, 50) = cv::Vec3b(255, 0, 0);
算术运算

加法、减法、乘法和除法等算术运算也可以很容易地应用到图像上。

// 创建两个 256x256 大小的图像,一个红色,一个蓝色
    cv::Mat red_image(256, 256, CV_8UC3, cv::Scalar(0, 0, 255));
    cv::Mat blue_image(256, 256, CV_8UC3, cv::Scalar(255, 0, 0));

    // 加法运算
    cv::Mat addition_result = red_image + blue_image;

    // 减法运算
    cv::Mat subtraction_result = red_image - blue_image;

    // 乘法运算 - 图像混合示例
    cv::Mat blend_alpha(256, 256, CV_8UC3, cv::Scalar(0.5, 0.5, 0.5));  // alpha通道为0.5
    cv::Mat multiplication_result;
    cv::multiply(red_image, blend_alpha, multiplication_result, 1.0 / 255);  // 正规化因子 1/255

    // 除法运算 - 归一化示例
    cv::Mat division_result;
    cv::divide(red_image, cv::Scalar(255, 255, 255), division_result);  // 归一化到 [0, 1] 范围

    // 显示结果
    cv::imshow("Addition Result", addition_result);
    cv::imshow("Subtraction Result", subtraction_result);
    cv::imshow("Multiplication Result", multiplication_result);
    cv::imshow("Division Result", division_result);

下一篇文章中,将介绍新的图像和视频编解码器技术


公众号:coding日记


标签:Mat,image,色彩,图像处理,result,OpenCV4,图像,操作,cv
From: https://blog.51cto.com/u_16062556/8030101

相关文章

  • OpenCV4 :并行计算cv::parallel_for_
    OpenCV4:并行计算cv::parallel_for_在计算机视觉和图像处理领域,OpenCV(开源计算机视觉库)是一个非常强大和广泛使用的库。随着图像分辨率的提高和计算任务的复杂度增加,实时处理变得越来越困难。为了解决这个问题,OpenCV提供了并行处理能力,可以显著提高代码的性能。本文将介绍如何利用O......
  • 【示波器的原理,使用方法和基本操作步骤】
    简介:示波器入门非常简单,使用AutoScale(自动定标)功能,能轻易的捕捉波形。入门级的AutoScale所采用的“边沿触发”,通过查找波形上的指定沿(上升沿或下降沿等)和电压电平来识别触发。TriggerLevel(触发电平)示波器作用:用来观察和分析电信号的各种特性(包括频率、幅度、相位、波形......
  • 数据库的基本操作2
    今日内容详细外键"""缺陷1.表的重点不清晰 可以忽略 到底是员工表还是部门表2.表中相关字段一直在重复存储 可以忽略 浪费存储空间3.表的扩展性极差,牵一发而动全身不能忽略""" 解决方式 将上述一张表拆分成两张表 emp与dep #上述三个缺陷全......
  • 23.10.25(前端页面输入框的各种操作1)
    <tr><%--限制必须输入,学号限制位数、前四位必须是2023,性别限制男或女,专业用下拉框--%><th>姓名</th><inputtype="text"name="name"required><th>学号</th><inputtype="text"name="number"requ......
  • 23.10.25(前端页面输入框的各种操作2)
    <scripttype="text/javascript"><!--全选的方法--><--复选框的定义方法以及全选方法-->functionselectAll(){vars=document.getElementsByName("like");for(vari=0;......
  • Nacos相关技术文档&Golang操作Nacos实现配置监听的代码
    Nacos相关技术文档Nacos中文文档~~~(三)Nacos开发教程之服务数据持久化(四)Nacos开发教程之SpringCloud集成服务注册(参考,后续用go实现)(五)Nacos开发教程之SpringCloud集成配置管理(参考,后续用go实现)(六)Nacos开发教程之后台系统使用~~~Mac-M1电脑本地使用docker搭建Nacos-Server参考:http......
  • c语言条件操作符的使用
    条件操作符--exp1?exp2:exp3exp1为真,执行exp2exp1为假,执行exp3取最大值intmain(){ inta=10; intb=20; intmax=0; max=(a>b?a:b); //if(a>b) // max=a; //else // max=b; printf("max=%d\n",max); return0;}......
  • 关于在vue 中翻译select 下拉数据的操作
    可以使用object.keys()import*asfiltersfrom"./filters";//globalfiltersObject.keys(filters).forEach((key)=>{Vue.filter(key,filters[key]);//eslint-disable-lineno-undef});<el-select:value="detailRow.prpLpayeeD......
  • Linux操作(第二周)
    在学习Linux的第二周,我认为文件管理是非常重要的一部分。本周我们主要学习了如何在CentOS7中使用命令行进行文件管理,以下是我的上课总结:首先,我们熟悉并上手操作一些常用的命令和概念。例如,使用“cd”命令可以进入到一个目录中,使用“ls”命令可以列出当前目录下的所有文......
  • Linux操作(第一周)
    第一周学习Linux在CentOS7中的基础过程总结在这一周的学习中,我对Linux操作系统的基础知识和CentOS7的使用方法有了初步的了解。以下是我在这一周中所学到的内容的总结:Linux和CentOS7简介:Linux是一种开源的操作系统,它具有高度的稳定性、安全性和灵活性,被广泛用于服务器环境。......