对OpenCV中矩阵Mat的小分析

本文详细介绍了OpenCV中矩阵的基本操作,包括如何创建矩阵、获取特定行列数的元素等,并通过实例演示了如何利用矩阵进行图像处理。重点突出矩阵在图像处理领域的应用,帮助开发者更深入理解OpenCV的矩阵功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OpenCV中经常要进行对矩阵的操作,Mat是OpenCV中存储矩阵的类型,其包含在opencv/cv.h头文件下,其最简单的赋值操作为:

double a[] = {1,  2,  3,  4,
              5,  6,  7,  8,
              9, 10, 11, 12};


cv::Mat m(3, 4, CV_64F, a);

这里建立了一个3行4列的矩阵m,元素类型为CV_64F,注意在声明其大小的时候是按照先行后列的顺序赋值,另外,a中元素的类型与矩阵元素的类型应该对应(这里都是double),否则不能正常取值。


现在的问题是,想要取得m中特定行列数的元素,应该如何操作?

OpenCV提供了at函数,可以解决该问题,使用at的方法如下:

double r = matGet2D(m, 0, 2);
<pre name="code" class="cpp">double matGet2D(cv::Mat m, int row, int col)
{
    int type = m.type();
    switch(type)
    {
        case CV_8U:
            return m.at<uchar>(row,col);
            break;
        case CV_8S:
            return m.at<schar>(row,col);
            break;
        case CV_16U:
            return m.at<ushort>(row,col);
            break;
        case CV_16S:
            return m.at<short>(row,col);
            break;
        case CV_32S:
            return m.at<int>(row,col);
            break;
        case CV_32F:
            return m.at<float>(row,col);
            break;
        case CV_64F:
            return m.at<double>(row,col);
            break;
    }
}



此处的matGet2D为自定义函数,功能是根据元素类型利用at函数获取矩阵中的元素,按照上面的写法,返回值r应为矩阵m中第0行、第2列的元素:3

经测试,r=3,符合预期。这说明at函数的参数也是按照先行后列的原则排列的。而在图像处理领域,由图片转换而来的矩阵,其x轴对应图片宽度,y轴对应图片高度,因此x对应列数,而y对应行数,利用at函数获取(x,y)点像素值时应写成at(y,x)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值