关闭

opencv 取Mat元素的值

标签: opencv
1499人阅读 评论(0) 收藏 举报
分类:
获取通道channels=1,Mat元素类型为CV_32SC1的元素的值

1)使用ptr指针

mat.ptr<uchar>(i)+j) 形式
注意:
(1)元素类型是什么类型就用什么类型的指针,如CV_32SC1为32位有符号1通道矩阵,用uchar*指针,CV_32FC1为32位浮点单精度1通道矩阵,使用float*指针。

#include<cv.h>
#include<highgui.h>
#include<stdio.h>
using namespace cv;
using namespace std;
int main()
{
    Mat mat(5, 5, CV_32SC1,1);//新建一个初始化值为1的Mat矩阵
    //cout << mat;//使用cout能直接输出矩阵的值
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            printf("%d ",*(uchar*)(mat.ptr<uchar>(i)+j));

        }
    }

    return 0;
}

2)直接使用指针

注意:
(1)mat.step[0]为每一行所占字节数
(2)mat.step[1]每个元素所占字节数

#include<cv.h>
#include<highgui.h>
#include<stdio.h>
using namespace cv;
using namespace std;
int main()
{
    Mat mat(5, 5, CV_32SC1,1);//新建一个初始化值为1的Mat矩阵
    //cout << mat;//使用cout能直接输出矩阵的值

    printf("mat.step[0]=%d\n", mat.step[0]);//每一行所占字节数目
    printf("mat.step[1]=%d\n", mat.step[1]);//每个元素所占字节数
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            int elmValue = *(uchar*)(mat.data + mat.step[0] * i + mat.step[1] * j);
            printf("%d ", elmValue); 

        }
        printf("\n");
    }

    return 0;
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:51605次
    • 积分:1371
    • 等级:
    • 排名:千里之外
    • 原创:72篇
    • 转载:1篇
    • 译文:0篇
    • 评论:22条
    最新评论