一:构造并访问单通道。

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. EF用导航熟悉遍历从表时,删除主表出错

    var entitys= Repository.Table.Where(a => ids.Contains(a.UUID)).ToList(); entitys.ForEach(a => ...

  2. 大O符号初学者指南

    原文地址:https://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/ 计算机科学中,大O表示法被用来描述一个算法的性能或复杂度. ...

  3. ES6-Promise承诺

    1.扩展:ajax 1.1 代码如下 $.ajax({ url:'地址', type:'get/post', data:{}, dataType:'json/jsonp', success:funct ...

  4. Java实现 蓝桥杯 算法提高 新建Microsoft world文档

    算法提高 新建Microsoft Word文档 时间限制:1.0s 内存限制:256.0MB 问题描述 L正在出题,新建了一个word文档,想不好取什么名字,身旁一人惊问:"你出的题目叫&l ...

  5. Java实现 LeetCode 396 旋转函数

    396. 旋转函数 给定一个长度为 n 的整数数组 A . 假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组,我们定义 A 的"旋转函数" F 为: F(k) = 0 * B ...

  6. Java实现 LeetCode 58 最后一个单词的长度

    58. 最后一个单词的长度 给定一个仅包含大小写字母和空格 ' ' 的字符串 s,返回其最后一个单词的长度. 如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词. 如果不存在最后一个单词, ...

  7. iOS-pthread && NSThread && iOS9网络适配

    几个概念: 进程:"正在运行"应用程序(app)就是一个进程,它至少包含一个线程:            进程的作用:为应用程序开辟内存空间: 线程:CPU调度的最小单元:     ...

  8. ASP.NET Core中间件与HttpModule有何不同

    前言 在ASP.NET Core中最大的更改之一是对Http请求管道的更改,在ASP.NET中我们了解HttpHandler和HttpModule但是到现在这些已经被替换为中间件那么下面我们来看一下他 ...

  9. STM32学习笔记——printf

    printf复习 当我们写printf("%d\n", 1);的时候,printf函数并不能通过C语言语法得知第二个参数是int类型.printf是一个变参函数(variadic ...

  10. LVS 负载均衡器理论基础及抓包分析

    LVS 是 Linux Virtual Server 的简写,即 Linux 虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一.(百 ...