opencv C++构造并访问单通道和多通道Mat。
一:构造并访问单通道。
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。的更多相关文章
- stm32之ADC应用实例(单通道、多通道、基于DMA)
文本仅做记录.. 硬件:STM32F103VCT6 开发工具:Keil uVision4 下载调试工具:ARM仿真器 网上资料很多,这里做一个详细的整合.(也不是很详细,但很通俗). 所用的芯片内嵌 ...
- stm32之ADC应用实例(单通道、多通道、基于DMA)-转载精华帖,最后一部分的代码是精华
硬件:STM32F103VCT6 开发工具:Keil uVision4 下载调试工具:ARM仿真器网上资料很多,这里做一个详细的整合.(也不是很详细,但很通俗).所用的芯片内嵌3个12位的 ...
- 多通道(Multichannel)单通道(singlechannel)图像概念梳理
在做机器视觉时,常常要将一个多通道图像分离成几个单通道图像或者将几个单通道图像合成一个多通道图像,以方便图像处理,但是.写这篇博客,是为加深对这两个概念的理解,下面会给出部分OpenCV对单通道与多通 ...
- OpenCV中图像以Mat类型保存时各通道数据在内存中的组织形式及python代码访问各通道数据的简要方式
以最简单的4 x 5三通道图像为例,其在内存中Mat类型的数据组织形式如下: 每一行的每一列像素的三个通道数据组成一个一维数组,一行像素组成一个二维数组,整幅图像组成一个三维数组,即: Mat.dat ...
- C++ opencv 滑动条 Trackbary以及处理三通道和单通道图像
#include <opencv2\core.hpp> #include <opencv2\highgui.hpp> #include <opencv2\imgproc. ...
- STM32F10x_ADC三通道逐次转换(单次、单通道软件触发)
Ⅰ.概述 本文讲述关于STM32功能比较强大的ADC模块.ADC(Analog to Digital Converter)也就是模拟量转化为数字量,而STM32的ADC模块功能比较多,本文主要讲述“三 ...
- opencv 3 core组件进阶(2 ROI区域图像叠加&图像混合;分离颜色通道、多通道图像混合;图像对比度,亮度值调整)
ROI区域图像叠加&图像混合 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp&g ...
- RH6030 单通道触摸感应开关
1.概述: RH6030 是一款单通道电容式触摸感应控制开关IC,可以替代传统的机械式开关. 该 IC 采用CMOS 工艺制造,结构简单,性能稳定.IC 可通过外部引脚配置成多种工作模式,可广泛应用于 ...
- opencv 3.1.0 访问像素值的三种方法(C++)
三种方法分别问: 指针访问:void colorReduce_ptr(cv::Mat &inputImage, cv::Mat &outputImage, int div); 迭代器访 ...
随机推荐
- 【Java8新特性】接口中的默认方法和静态方法,你都掌握了吗?
写在前面 在Java8之前的版本中,接口中只能声明常量和抽象方法,接口的实现类中必须实现接口中所有的抽象方法.而在Java8中,接口中可以声明默认方法和静态方法,本文,我们就一起探讨下接口中的默认方法 ...
- 《学习scrapy框架爬小说》的进一步完善
一.完善目标: 1.为方便使用,把小说拼音或英文名,小说输出中文名,第一章节url地址变量化,修改这些参数即可爬取不同的小说. 2.修改settings.py设置文件,配置为记录debug的log信息 ...
- URL跳转与钓鱼
从登录页跳转到另一个页面就叫做URL跳转. 1.URL跳转 URL跳转一般分为两种,(1)客户端跳转:(2)服务端跳转.对用户来说,两种跳转都是透明的,都是指向或者跳转到另一个页面,页面发生了改变.但 ...
- Java实现 LeetCode 790 多米诺和托米诺平铺(递推)
790. 多米诺和托米诺平铺 有两种形状的瓷砖:一种是 2x1 的多米诺形,另一种是形如 "L" 的托米诺形.两种形状都可以旋转. XX <- 多米诺 XX <- &q ...
- Java实现 LeetCode 728 自除数(暴力)
728. 自除数 自除数 是指可以被它包含的每一位数除尽的数. 例如,128 是一个自除数,因为 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0. 还有,自除数不允许包含 ...
- Java实现 LeetCode 658 找到 K 个最接近的元素(暴力)
658. 找到 K 个最接近的元素 给定一个排序好的数组,两个整数 k 和 x,从数组中找到最靠近 x(两数之差最小)的 k 个数.返回的结果必须要是按升序排好的.如果有两个数与 x 的差值一样,优先 ...
- Java实现 LeetCode 476 数字的补数
476. 数字的补数 给定一个正整数,输出它的补数.补数是对该数的二进制表示取反. 示例 1: 输入: 5 输出: 2 解释: 5 的二进制表示为 101(没有前导零位),其补数为 010.所以你需要 ...
- Java实现洛谷 P1428 小鱼比可爱
题目描述 人比人,气死人:鱼比鱼,难死鱼.小鱼最近参加了一个"比可爱"比赛,比的是每只鱼的可爱程度.参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只 ...
- DMR对讲机利用XLX网络联网通信
By 申建军 BD8SN 2018-9-29 本文适用于运行G4KLX DMRGateway的MMDVM热点和中继,目前国内绝大部分的热点用户都是使用pi-star镜像的MMDVM热点,均可按此设置. ...
- Android getMeasuredHeight()与getHeight()的区别
getMeasuredHeight()返回的是原始测量高度,与屏幕无关 getHeight()返回的是在屏幕上显示的高度 实际上在当屏幕可以包裹内容的时候,他们的值是相等的,只有当view超出屏幕后, ...