当前位置: 首页 > news >正文

OpenCV(三):Mat类数据的读取

目录

1.Mat类矩阵的常用属性

2.Mat元素的读取

1.at方法读取Mat矩阵元素 at (int row,int col)

2.矩阵元素地址定位方式访问元素

3.Android jni demo


1.Mat类矩阵的常用属性

下面是一些Mat类的常用属性:

  1. rows: 返回Mat对象的行数。

  2. cols: 返回Mat对象的列数。

  3. dims: 返回Mat对象的维度数,通常为2(表示二维矩阵)。

  4. size(): 返回Mat对象的尺寸(行数和列数)。

  5. empty(): 返回一个布尔值,判断Mat对象是否为空(即未分配内存)。

  6. total(): 返回Mat对象的总元素数。

  7. type(): 返回Mat对象的数据类型,例如CV_8UC1表示8位无符号单通道图像。

  8. channels(): 返回Mat对象的通道数。

  9. depth(): 返回Mat对象中每个像素元素的深度。

  10. elemSize(): 返回Mat对象中每个像素元素的大小(以字节为单位)。

  11. elemSize1(): 返回Mat对象中每个像素元素的大小(以字节为单位),不考虑通道数。

  12. isContinuous(): 返回一个布尔值,指示Mat对象的数据是否连续存储。

  13. total(): 返回Mat对象的总元素数量。

  14. step: 返回Mat对象中每行像素数据的字节步长。

2.Mat元素的读取

1.at方法读取Mat矩阵元素 at (int row,int col)

单通道:

 int value = (int)a.at<uchar>(0, 0);

多通道:

cv::Vec3b vc3 = b.at<cv::Vec3b>(0, 0)

int first = (int)vc3.val[0];

2.矩阵元素地址定位方式访问元素

单通道

(int)(*(b.data + b.step[0] * row + b.step[1]* col + channel));

比较直观

不用考虑数据类型

3.Android jni demo

#include <jni.h>
#include <string>
#include <android/bitmap.h>
#include <opencv2/opencv.hpp>
#include <iostream>
#include <android/log.h>#define LOG_TAG "xxx"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)using namespace cv;
using namespace std;extern "C"JNIEXPORT void JNICALLJava_com_example_myapplication_MainActivity_test(JNIEnv *env, jclass clazz) {Mat c0(5,5,CV_8UC1,Scalar(4,5,6));Mat c1(5,5,CV_8UC2,Scalar(4,5,6));Mat c2(5,5,CV_8UC3,Scalar(4,5,6));Mat d = (Mat_<int>(1, 5) << 1, 2, 3, 4, 5);ostringstream ss;ss<<"Mat d的【0,0】="<<d.at<int>(0,0)<<endl;Vec2b vc=c1.at<Vec2b>(0,1);ss<<"vc.val[0]="<<(int)vc.val[0]<<" vc.val[1]="<<(int)vc.val[1]<<endl;ss<<(int)(*(c2.data + c2.step[0] * 2 + c2.step[1]* 2 + 3))<<endl;LOGD("%s",ss.str().c_str());}

运行结果:

http://www.lryc.cn/news/150439.html

相关文章:

  • 区块链BaaS篇
  • C++|观察者模式
  • 【java 入侵 C# 之路】1-入门
  • 【git】从一个git仓库迁移到另外一个git仓库
  • 控制goroutine 的并发执行数量
  • 深入解析即时通讯App开发中的关键技术
  • ClickHouse进阶(三):ClickHouse 索引
  • 四、MySQL(表操作)如何添加字段?修改表?删除字段?修改表名?删除表?格式化某张表?
  • docker启动paddlespeech服务,并使用接口调用
  • 如何训练ChatGPT以生成音乐和创意艺术作品?
  • 北约报告:2023-2043,下一代量子技术的发展与挑战
  • arm版Linux下安装es集群
  • vConsole调试工具的三种使用方式
  • 不用订阅,不用破解,永久免费使用Axure最新版教程
  • 合宙Air724UG LuatOS-Air LVGL API控件--复选框 (Checkbox)
  • 使用nps实现内网穿透
  • 时序预测 | MATLAB实现TCN-BiGRU时间卷积双向门控循环单元时间序列预测
  • websocket和uni-app里使用websocket
  • Opencv-C++笔记 (18) : 轮廓和凸包
  • 【半监督医学图像分割】2022-MedIA-UWI
  • python发送邮件
  • gitee上传本地项目bug
  • 自然语言处理2-NLP
  • 穿上App外衣,保持Web灵魂——PWA温故
  • 【跟小嘉学 Rust 编程】二十六、Rust的序列化解决方案(Serde)
  • 菜鸟教程《Python 3 教程》笔记(14):函数
  • SEC推迟ETF,BTC跌破26k,十年之约#6逢跌加仓
  • c++20 多线程并发 latch barrier semaphore
  • 【8 排序】简单选择排序。
  • 中国太保首席数据库专家林春:先难后易,核心系统数据库升级复盘