计算机视觉之OpenCV教程 ---Mat类基础(一)

本文介绍了OpenCV在机器视觉领域的应用,重点讲解了OpenCV核心模块中的Mat类基础,包括Mat的基本结构、浅复制和深复制的概念及实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

机器视觉之OpenCV教程图像容器Mat类基础一(一)

零、OpenCV概述

  1. 基本上在机器识别的领域 ,都有OpenCV的身影 。
  2. OpenCV中基本上包含了所有的机器视觉所用到的算法 , 即使没有也能利用OpenCV平台快速搭建出来。
  3. OpenCV核心模块(Core Module)的主要内容
    1. Mat基本图像容器
    2. 扫描图像的几种方式
    3. 在图像上进行掩膜操作
    4. 图像的基本操作
    5. 图像的叠加 混合操作
    6. 改变 图像对比度和亮度
    7. 基本绘图函数使用
    8. 随机数以及本文内容的生成
    9. 离散傅里叶(DFT)变换
    10. XML和YML格式的IO
    11. 如何与OpenCv1.x版本共同使用

一、Mat基本图像容器

  1. 数字图像在计算机中是以二维矩阵的形式 存放的
  2. Mat的基本结构
    1. Matrix Header: 矩阵头 , 占用固定大小的内存 , 描述了矩阵的基本信息 , 如:矩阵的长宽 、 数据指针的位置 , 数据类型 , 通道数量 。。。。
    2. Matrix Date : 指向矩阵数据(像素值)的指针 , 占用内存依据图像的大小以及图像数据类型和通道等变化 。

二、Mat类浅复制

  1. 图像处理最显著的特点就是计算量大 , 占用内存多 , 所以尽量避免图像的深度拷贝 。
  2. 为了避免大规模内存数据块的深度拷贝操作 , OpenCV采用了引用计数 策略 , 此策略的核心思想是每一个Mat对象都有自己的头 , 但是不同的Mat对象的数据指针可以指向同一块区域并对其进行操作。 此时拷贝构造函数和 赋值操作 只是重新开辟一个矩阵头的内存区域 , 而不再申请数据区的内存 。

    Mat A , C;//创建两个矩阵头
    A = imread(src);//读取图片 , 为A独到的数据开辟内存区
    Mat B(A);//使用拷贝构造函数创建一个新的Mat对象B
    C = A ; //使用赋值操作符把A对象复制给C
    此时 A 、 B、 C三个Mat对象的矩阵头都指向了同一个数据区 。

  3. ROI: 感兴趣区域

    1. 你可以创建一个新的矩阵头, 指向另一个矩阵的一个子集 ,由于这是浅复制 ,, 这个新的矩阵头对ROI子集的任何修改都会直接修改源数据 。
    2. 指定ROI的两种方法:

      Mat D(A , Rect(x , y , width , height));//使用矩形指定ROI的区域
      Mat E = A(Range(a,b) , Range(c , d));//a、b用于指定哪行到哪行 , c、d用于指定哪列到哪列 。 使用Range限定行列的边界指定ROI
      

三、深层拷贝

  1. clone函数: Mat B = A.clone();
  2. copyTo函数: Mat C ; A.copyTo(A);
  3. A、B、C 的数据区独立存在 , 互不影响 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值