一:构造并访问单通道。

int main(){
    cv::Mat m=(cv::Mat_<int>(3,2)<<1,2,3,4,5,6);
    for(int i=0;i<m.rows;++i){
        for(int j=0;j<m.cols;++j)
            std::cout<<m.at<int>(i,j)<<",";  // row Index along the dimension 0,col Index along the dimension 1
        std::cout<<std::endl;
    }
    // cv::Size size=m.size();
    std::cout<<"size:"<<m.size()<<std::endl;  // m.size():return the width and the height.
    std::cout<<"channel:"<<m.channels()<<std::endl;  // m.channels():The method returns the number of matrix channels.
    std::cout<<"total:"<<m.total()<<std::endl;  // m.total():The method returns the number of array elements
    std::cout<<"dimension:"<<m.dims<<std::endl;  // m.dims:the matrix dimensionality, >= 2.

    for(int i=0;i<m.rows;++i){
        const int *ptr=m.ptr<int>(i);  // i-based row index.
        for(int j=0;j<m.cols;++j)
            std::cout<<ptr[j]<<",";
        std::cout<<std::endl;
    }

    if(m.isContinuous()){
        const int *ptr=m.ptr<int>(0);  // 0-based row index.
        for(int i=0;i<m.rows*m.cols;++i)
            std::cout<<ptr[i]<<",";
        std::cout<<std::endl;
    }

    for(int i=0;i<m.rows;++i){  // 与下面相似
        for(int j=0;j<m.cols;++j){
           int *ptr=(int*)(m.data+m.step[0]*i+m.step[1]*j);
            std::cout<<*ptr<<",";
        }
        std::cout<<std::endl;
    }

    for(int i=0;i<m.rows;++i){
        for(int j=0;j<m.cols;++j)
            std::cout<<*((int*)(m.data+m.step[0]*i+m.step[1]*j))<<",";
        std::cout<<std::endl;
        // 二维图像:step[0]代表每一行所占的字节数,而如果有间隔的话,这个间隔也作为字节数的一部分被计算在内.
        // 二维图像:step[1]代表每一个数值所占的字节数.
        // data是指向第一个数值的指针,类型为uchar.

        // (int*)(BaseAddr+IER)把它强制变成int型指针.
        // *((int*)(BaseAddr+IER))取这个指针指向的值.
        // BaseAddr+IER是个地址.

    }
    return 0;
}

二:构造并访问多通道。

#include<opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include<iostream>
int main(){
cv::Mat m=(cv::Mat_<cv::Vec3i>(,)<<cv::Vec3i(,,),cv::Vec3i(,,),cv::Vec3i(,,),cv::Vec3i(,,));
for(int i=;i<m.rows;++i){
for(int j=;j<m.cols;++j)
std::cout<<m.at<cv::Vec3i>(i,j)<<","; // row Index along the dimension 0,col Index along the dimension 1
std::cout<<std::endl;
} for(int i=;i<m.rows;++i){
const cv::Vec3i *ptr=m.ptr<cv::Vec3i>(i); // i-based row index.
for(int j=;j<m.cols;++j)
std::cout<<ptr[j]<<",";
std::cout<<std::endl;
} if(m.isContinuous()){
const cv::Vec3i *ptr=m.ptr<cv::Vec3i>(); // 0-based row index.
for(int i=;i<m.rows*m.cols;++i)
std::cout<<ptr[i]<<",";
std::cout<<std::endl;
} for(int i=;i<m.rows;++i){ // 与下面相似
for(int j=;j<m.cols;++j){
cv::Vec3i *ptr=(cv::Vec3i*)(m.data+m.step[]*i+m.step[]*j);
std::cout<<*ptr<<",";
}
std::cout<<std::endl;
} for(int i=;i<m.rows;++i){
for(int j=;j<m.cols;++j)
std::cout<<*((cv::Vec3i*)(m.data+m.step[]*i+m.step[]*j))<<",";
std::cout<<std::endl;
// 二维图像:step[0]代表每一行所占的字节数,而如果有间隔的话,这个间隔也作为字节数的一部分被计算在内.
// 二维图像:step[1]代表每一个数值所占的字节数.
// data是指向第一个数值的指针,类型为uchar. // (cv::Vec3i*)(m.data+m.step[0]*i+m.step[1]*j)把它强制变成Vec3i型指针.
// *((cv::Vec3i*)(m.data+m.step[0]*i+m.step[1]*j))取这个指针指向的值.
// m.data+m.step[0]*i+m.step[1]*j是个地址. } return ;
}

opencv C++构造并访问单通道和多通道Mat。的更多相关文章

  1. stm32之ADC应用实例(单通道、多通道、基于DMA)

    文本仅做记录.. 硬件:STM32F103VCT6 开发工具:Keil uVision4 下载调试工具:ARM仿真器 网上资料很多,这里做一个详细的整合.(也不是很详细,但很通俗).  所用的芯片内嵌 ...

  2. stm32之ADC应用实例(单通道、多通道、基于DMA)-转载精华帖,最后一部分的代码是精华

    硬件:STM32F103VCT6    开发工具:Keil uVision4    下载调试工具:ARM仿真器网上资料很多,这里做一个详细的整合.(也不是很详细,但很通俗).所用的芯片内嵌3个12位的 ...

  3. 多通道(Multichannel)单通道(singlechannel)图像概念梳理

    在做机器视觉时,常常要将一个多通道图像分离成几个单通道图像或者将几个单通道图像合成一个多通道图像,以方便图像处理,但是.写这篇博客,是为加深对这两个概念的理解,下面会给出部分OpenCV对单通道与多通 ...

  4. OpenCV中图像以Mat类型保存时各通道数据在内存中的组织形式及python代码访问各通道数据的简要方式

    以最简单的4 x 5三通道图像为例,其在内存中Mat类型的数据组织形式如下: 每一行的每一列像素的三个通道数据组成一个一维数组,一行像素组成一个二维数组,整幅图像组成一个三维数组,即: Mat.dat ...

  5. C++ opencv 滑动条 Trackbary以及处理三通道和单通道图像

    #include <opencv2\core.hpp> #include <opencv2\highgui.hpp> #include <opencv2\imgproc. ...

  6. STM32F10x_ADC三通道逐次转换(单次、单通道软件触发)

    Ⅰ.概述 本文讲述关于STM32功能比较强大的ADC模块.ADC(Analog to Digital Converter)也就是模拟量转化为数字量,而STM32的ADC模块功能比较多,本文主要讲述“三 ...

  7. opencv 3 core组件进阶(2 ROI区域图像叠加&图像混合;分离颜色通道、多通道图像混合;图像对比度,亮度值调整)

    ROI区域图像叠加&图像混合 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp&g ...

  8. RH6030 单通道触摸感应开关

    1.概述: RH6030 是一款单通道电容式触摸感应控制开关IC,可以替代传统的机械式开关. 该 IC 采用CMOS 工艺制造,结构简单,性能稳定.IC 可通过外部引脚配置成多种工作模式,可广泛应用于 ...

  9. opencv 3.1.0 访问像素值的三种方法(C++)

    三种方法分别问: 指针访问:void colorReduce_ptr(cv::Mat &inputImage, cv::Mat &outputImage, int div); 迭代器访 ...

随机推荐

  1. 解决docker创建的elasticsearch-head容器不能连接elasticsearch等问题

    在使用docker创建elasticsearch-head容器去连接elasticsearch的时候,容易出两个问题 1.不能连接elasticsearch 修改elasticsearch.yml文件 ...

  2. [Unity2d系列教程] 004.Unity如何调用ios的方法(SDK集成相关)

    和上一篇类似,我们同样希望Unity能够直接调用IOS底层的代码,那么我们就需要研究怎么去实现它.下面让我来带大家看一个简单的例子 1.创建.h和.m文件如下 .h // // myTest.m // ...

  3. excel操作数据实用技能

    写代码写习惯了,在做数据预处理时也总是习惯性地用python.pandas来做处理,但其实有时候根本不需要写代码,用excel也能达到目的,甚至比写代码快很多,写代码要半天,excel只要几秒钟.下面 ...

  4. 几个值得学习的Java博客

    谈面试时从写一个单例开始究竟能问多深及终极解决方案  提到了<深入理解java虚拟器><java并发编程实践> 美团点评的技术博客:MySQL索引原理及慢查询优化 https: ...

  5. 【Python】组合数据类型

    集合类型 集合类型定义 集合是多个元素的无序组合 集合类型与数学中的集合概念一致 集合元素之间无序,每个元素唯一,不存在相同元素 集合元素不可更改,不能是可变数据类型 理解:因为集合类型不重复,所以不 ...

  6. 非阻塞赋值(Non-blocking Assignment)是个伪需求(2)

    https://mp.weixin.qq.com/s/5NWvdK3T2X4dtyRqtNrBbg   13hope: 个人理解,Verilog本身只是“建模”语言.具体到阻塞/非阻塞,只规定了两种赋 ...

  7. Chisel3 - 接口方向(Direction)

    https://mp.weixin.qq.com/s/36jreQGpDLCCNfmUwI34lA   模块接口有三种方向:Input/Output/Inout.Chisel在声明模块接口的时候,也需 ...

  8. 【HIVE】数据分析HQL的编写方法/思路

    SQL编写一般思路: 1)复杂的查询,先划分为小任务,以降低难度.分别实现各个小任务后,再进行汇总: 2)涉及多表时,先进行联表查询: 3)简单分组,一般只需要group by即可: 4)组内TopN ...

  9. Java实现 LeetCode 740 删除与获得点数(递推 || 动态规划?打家劫舍Ⅳ)

    740. 删除与获得点数 给定一个整数数组 nums ,你可以对它进行一些操作. 每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数.之后,你必须删除每个等于 nums[ ...

  10. Java实现 LeetCode 378 有序矩阵中第K小的元素

    378. 有序矩阵中第K小的元素 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素. 请注意,它是排序后的第k小元素,而不是第k个元素. 示例: matrix = [ ...