Ubuntu下OpenCV编程[2]-cv::Mat类

cv::Mat类介绍

遍历cv::Mat图像矩阵

  • 使用at函数进行遍历
  • 使用迭代器进行遍历
  • 使用指针进行遍历
  • 使用子类 cv::Mat_ 运算符重载函数()

由于像素点的数据类型不同,将这几种方式遍历的测试函数,封装成模板函数,如下所示:

namespace Hui {
    // 1. 使用 for循环 + at函数 遍历图像矩阵
    template <typename T>
    void travelMatByAt(cv::Mat &mat, T &pixel)
    {
        for (int i = 0; i < mat.rows; ++i)
            for (int j = 0; j < mat.cols; ++j)
                mat.at<T>(i, j) = pixel;
    }

    // 2. 使用 for循环 + 指针操作 遍历图像矩阵
    template <typename T>
    void travelMatByPointer(cv::Mat &mat, T &pixel)
    {
        for (int i = 0; i < mat.rows; ++i) {
            T *pCol = mat.ptr<T>(i);
            for (int j = 0; j < mat.cols * mat.channels(); ++j) {
                pCol[j] = pixel;
            }
        }
    }

    // 3. 使用迭代器遍历图像矩阵
    template <typename T>
    void travelMapByIterator(cv::Mat &mat, T &pixel)
    {
        for (cv::MatIterator_<T> it = mat.begin<T>(); it != mat.end<T>(); ++it)
            *it = pixel;
    }

    // 4. 使用子类 cv::Mat_ 运算符重载函数()
    template <typename T>
    void travelMapByMap_(cv::Mat &mat, T &pixel)
    {
        cv::Mat_<T> mat_ = mat; //模板类Mat_继承自Mat,=使用的是浅拷贝
        for (int i = 0; i < mat_.rows; ++i)
            for (int j = 0; j < mat_.cols; ++j)
                mat_(i, j) = pixel;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值