• openCV Mat 基础


    参考:https://blog.csdn.net/qq_34963853/article/details/79746166

    Mat数据结构 Mat类型是opencv2.0后的类型,使用此类型无需进行内存管理,即无需手动分配内存,在不需要时自动释放内存,但因目前的许多嵌入式系统仅支持c语言,故而除了在某些嵌入式系统中使用cvMat或IplImage,
    基本使用Mat类型。 注:后续的matrix均表示存储图像像素值的矩阵 。 Mat包含2个数据部分:(1)the matrix header
    --包含matrix大小,存储方法,存储地址等,header内存大小固定;                   (2)指向像素matrix的指针,指向所有像素值的矩阵(根据所选存储方法不同,矩阵可以是不同的维数)的指针。 OpenCV使用的是引用计数系统:每个Mat对象都有着自己的header,但matrix可在两个实例中通过指向同一个matrix首地址的指针来共享数据。拷贝构造和赋值均只拷贝其header和指向matrix的指针,
    而非像素数据的本身。当拷贝一个Mat对象的header时,关于matrix的计数器数值增加,一旦header被清理了,counter减少,当counter减少到0的时候,matrix的内存空间会被释放。 可创建关于全部数据的子部分的header。例如,可通过创建一个有着新边界的header来创建ROI(感兴趣区域)。对应代码如下: Mat D (A, Rect(
    10, 10, 100, 100) ); //using a rectangle Mat E = A(Range::all(), Range(1,3)); //using row and column boundaries OpenCV提供了clone()和copyto()两函数来拷贝matrix数据本身,示例如下: Mat F = A.clone(); Mat G; A.copyTo(G); 像上述示例,修改F或G不会影响A中header所指matrix。
    显示创建Mat对象: Mat类型不仅可以存储图像,还可以通过构造函数创建一个Mat对象。如: Mat M(
    2,2, CV_8UC3, Scalar(0,0,255)); 构造函数的参数含义:行大小,列大小,数据类型及每个矩阵元素的通道数(具体形式CV_[The number of bits per item][Signed or Unsigned][Type Prefix]C[The channel number] ),数据(3通道时默认为B,G,R数值,如果想设置其他颜色空间可以通过cvtColor()转换)。
    已经存在的IplImage类型转换成Mat类型: IplImage
    * img = cvLoadImage("greatwave.png", 1); Mat mtx(img); // convert IplImage* -> Mat

    加载,转换颜色空间,保存图像文件 Mat image; image = imread( imageName, 1 );//读取图像文件 Mat gray_image; cvtColor( image, gray_image, COLOR_BGR2GRAY );//转换颜色空间 imwrite( "../../images/Gray_Image.jpg", gray_image );//保存图像文件
  • 相关阅读:
    延时显示(类QQ头像显示)
    getComputedStyle与currentStyle获取样式(style/class)
    私单
    厂里
    009 vue的响应式方法
    008 vue的v-for的使用及key的使用
    007 v-if,v-else-if,v-else和v-show
    006 Vue的v-on
    005 Vue 计算属性
    004 Vue的v-bind属性
  • 原文地址:https://www.cnblogs.com/zhibei/p/12273398.html
Copyright © 2020-2023  润新知