C++结合OpenCV:掌握图像基础与处理

这篇具有很好参考价值的文章主要介绍了C++结合OpenCV:掌握图像基础与处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

        图像表示

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

C++结合OpenCV:掌握图像基础与处理,SpireCV,计算机视觉,opencv,人工智能

图1  RGB色彩模型

        首先,我们可以将一幅图像定义为一个二维函数ƒ(x,y),其中x和y是空间(平面)的坐标,f是图像在点(x,y)处具有某种性质的F的值,而任何一对空间标点(x,y)处的幅值f,即为图像在该点的强度和灰度。

接下来,我们对坐标点(x,y)使用整数值表示:x=0,1,2,…M-1和y =0,1,2...N-1,图像可表示为如下所示RaC矩阵形式,其中,R是图像的行数,C为图像的列数,而矩阵中的每个元素即为像素。

C++结合OpenCV:掌握图像基础与处理,SpireCV,计算机视觉,opencv,人工智能

根据每个像素所代表的信息不同,可将图像分为二值图像、灰度图像和彩色图像。

注:基础术语

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

2.图像读取与显示

在opencv中,图像可以轻易地读取和显示。                 

#include <opencv2/opencv.hpp>  
#include <opencv2/highgui/highgui.hpp>  
int main() {  
    // 读取图像  
    cv::Mat img2 = cv::imread("img.jpg");    
    // 创建一个名为 "lesson" 的窗口  
    cv::namedWindow("lesson", cv::WINDOW_NORMAL);    
    // 在 "lesson" 窗口内显示图像  
    cv::imshow("lesson", img2);  
    // 等待用户按键,然后关闭窗口  
    cv::waitKey(0);  
    return 0;  
}

在本程序运行中:

1、在C++中,我们使用cv::Mat来表示图像。cv::imread()函数用于读取图像,返回一个cv::Mat对象。

2、cv::namedWindow()函数用于创建一个窗口,第一个参数是窗口名称,第二个参数是窗口标志。在这里,我们使用cv::WINDOW_NORMAL来允许窗口大小被调整。

3、cv::waitKey()函数用于等待用户按键。参数0表示无限等待,直到用户按下一个键。这个函数在显示图像时通常很有用,因为它允许用户看到图像,直到他们决定关闭它。如果用户按下了ESC键(ASCII码为27),那么程序将退出,在结束时返回0,表示程序正常退出。

运行上述程序,得到的运行结果如图2所示。

C++结合OpenCV:掌握图像基础与处理,SpireCV,计算机视觉,opencv,人工智能

图2  程序的运行结果

        在实际使用中,可以先通过函数cv::namedWindow()来创建一个窗口,再让函数 cv::imshow()引用该窗口来显示图像。也可以不创建窗口,直接使用函数 cv::imshow()引用一个并不存在的窗口,并在其中显示指定图像,这样函数 cv::imshow()实际上会完成如下两步操作。

        第1步:函数 cv::imshow()创建一个指定名称的新窗口。

        第2步:函数 cv::imshow()将图像显示在刚创建的窗口内。

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

在OpenCV中可以读取和修改图像中的特定像素。

c++代码示例:       

cv::Vec3b value = image.at<cv::Vec3b>(100, 100);

image.at<cv::Vec3b>(100, 100) = cv::Vec3b(255, 0, 0);

        第一行代码读取一个像素的值,第二行行代码将位于(100, 100)位置的像素值设置为(255, 0, 0),这是一个BGR值,对应于红色(因为蓝色和绿色通道的值都是0,而红色通道的值是255)。cv::Vec3b(255, 0, 0)创建了一个新的cv::Vec3b对象,其BGR值分别为255、0和0。然后,我们使用at<cv::Vec3b>(100,100)将这个位置的像素值设置为新创建的颜色值。注意,在图像处理中,(x, y)坐标通常表示列和行,而不是传统的数学坐标系统中的x和y轴。文章来源地址https://www.toymoban.com/news/detail-785155.html

到了这里,关于C++结合OpenCV:掌握图像基础与处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV [c++](图像处理基础示例小程序汇总)

    推荐 原创 NCUTer 2023-04-04 14:18:49 文章标签 Image 图像处理 文章分类 计算机视觉 人工智能 在51CTO的第一篇博文 阅读数 1467 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. waitKey()函数的功能是不断刷新图像,频率为delay,单位是ms。 delay为0时,则会一直显示这一帧。 delay不为0时,则

    2024年02月04日
    浏览(39)
  • 探索MATLAB世界:掌握基础知识与实用技能(1. MATLAB环境与基本操作 2. 数据类型与变量 3. 条件与循环,1. 数据分析与统计 2. 图像处理与计算机视觉 3. 信号处理与控制系统)

    欢迎阅读本篇博客,我们将深入探讨MATLAB语言的基础知识与实用技能,旨在帮助初学者、初中级MATLAB程序员以及在校大学生系统地掌握这门强大的科学计算与数据可视化工具。 一、MATLAB的基础知识 1. MATLAB环境与基本操作 2. 数据类型与变量 3. 条件与循环 二、MATLAB的实用技能

    2024年03月12日
    浏览(59)
  • 掌握imgproc组件:opencv-图像处理

    平滑处理(smoothing)也成为模糊处理(bluring),是一种简单且使用频率很高的图像处理方法。平滑处理的用途有很多,最常见的是用来减少图像上的噪点或者失真。在涉及到降低图像分辨率时,平滑处理是非常好用的方法。 图像滤波,指在尽量保留图像细节特征的条件下对标图像

    2024年02月12日
    浏览(35)
  • C++结合OpenCV:图像的加法运算

    一、图像运算 针对图像的加法运算、位运算都是比较基础的运算。但是,很多复杂的图像处理功能正是借助这些基础的运算来完成的。所以,牢固掌握基础操作,对于更好地实现图像处理是非常有帮助的。本章简单介绍了加法运算、位运算,并使用它们实现了位平面分解、图

    2024年01月18日
    浏览(44)
  • C++结合OpenCV:图像的基本表示方法

            二值图像是指仅仅包含黑色和白色两种颜色的图像。在计算机中,通过一个栅格状排列的数据集(矩阵)来表示和处理图像。例如,图1是一个字母A的图像,计算机在处理该图像时,会首先将其划分为一个个的小方块,每一个小方块就是一个独立的处理单位,称为

    2024年02月01日
    浏览(42)
  • ROS学习笔记15:ROS与OpenCV结合处理图像

      安装OpenCV sudo apt-get install ros-kinetic-vision-opencv libopencv-dev python-opencv   ROS进行图像处理是依赖于OpenCV库的。ROS通过一个叫CvBridge的功能包,将获取的图像数据转换成OpenCV的格式,OpenCV处理之后,传回给ROS进行图像显示(应用),如下图:   我们使用ROS驱动获取摄像头数

    2024年02月05日
    浏览(38)
  • 计算机图形图像技术(OpenCV核心功能、图像变换与图像平滑处理)

    1、显示图像 ①功能:在指定窗口中显示图像。 ②参数: name 为窗口的名字; image 为待显示的图像。 ③说明:可显示彩色或灰度的字节图像和浮点数图像,彩色图像数据按BGR顺序存储。 2、读入图像 ①功能:从指定文件读入图像。 ②参数: filename 为图像文件名,支持BMP、

    2024年02月03日
    浏览(46)
  • 计算机视觉传统图像处理库opencv的使用

    人工智能领域的图像处理分支,整理了计算机视觉传统图像处理库opencv的使用网址链接。 opencv使用范围,主要用在计算机视觉、视频分析、机器学习、医学影像处理、自动驾驶、工业检测、游戏开发上。 1):opencv效果视频 opencv10个应用场景 - 知乎 2):opencv介绍 AI必备技能

    2024年02月09日
    浏览(42)
  • OpenCV处理图像和计算机视觉任务时常见的算法和功能

    当涉及到OpenCV处理图像和计算机视觉任务时,有许多常见的具体算法和功能。以下是一些更具体的细分: 图像处理算法: 图像去噪 :包括均值去噪、高斯去噪、中值滤波等,用于减少图像中的噪声。 直方图均衡化 :用于增强图像的对比度,特别适用于低对比度图像。 边缘

    2024年02月11日
    浏览(40)
  • 基于 OpenCV 的车辆变道检测,计算机视觉+图像处理技术

    本期教程我们将和小伙伴们一起研究如何使用计算机视觉和图像处理技术来检测汽车在行驶中时汽车是否在改变车道!大家一定听说过使用 OpenCV 的 haar 级联文件可以检测到面部、眼睛等,但是如果目标是汽车,公共汽车呢? 01. 数据集 我们将道路上汽车的视频文件用作数据

    2024年01月25日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包