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

目录

1.Mat类矩阵的常用属性

2.Mat元素的读取

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

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

[3.Android jni demo](#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 JNICALL
    Java_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());
    }

运行结果:

相关推荐
网安Ruler31 分钟前
代码审计-PHP专题&原生开发&SQL注入&1day分析构造&正则搜索&语句执行监控&功能定位
android
paid槮2 小时前
MySql基础:数据类型
android·mysql·adb
用户2018792831673 小时前
AMS和app通信的小秘密
android
用户2018792831673 小时前
ThreadPoolExecutor之市场雇工的故事
android
诺诺Okami4 小时前
Android Framework-Launcher-InvariantDeviceProfile
android
Antonio9155 小时前
【音视频】Android NDK 与.so库适配
android·音视频
sun00770013 小时前
android ndk编译valgrind
android
多看书少吃饭14 小时前
基于 OpenCV 的眼球识别算法以及青光眼算法识别
人工智能·opencv·计算机视觉
AI视觉网奇15 小时前
android studio 断点无效
android·ide·android studio
jiaxi的天空15 小时前
android studio gradle 访问不了
android·ide·android studio