OpenCV中对Mat的遍历访问与赋值方法

一、访问

对于Mat的访问有两种方式

第一种,利用Mat::at进行访问

//读取3通道彩色图像
Mat img = imread("图片地址");
int px;
//读取图像中第一行第一列,Blue通道数据
int px = img.at<Vec3b>(0, 0)[0];

第二种,利用Mat的成员ptr指针进行访问

//读取3通道彩色图像
Mat img = imread("图片地址");
//将Mat中的第一行地址赋予pxVec
uchar* pxVec=img.ptr<uchar>(0);
//遍历访问Mat中各个像素值
int i, j;
int px;
for (i = 0; i < img.rows; i++)
{
    pxvec = img.ptr<uchar>(i);
    //三通道数据都在第一行依次排列,按照BGR顺序
    //依次赋值为1
    for (j = 0; j < img.cols*img.channels(); j++)
    {
        px=pxvec[j];
        //do anything

    }
} 

二、赋值

不能用Mat::at进行赋值,只能用ptr对Mat中的像素点进行赋值

一个完整的例子如下:

#include "stdafx.h"
#include <opencv2\core\core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include <vector>

int main()
{
    //对Mat进行遍历赋值
    //初始化Mat数据结构,256*256,三通道8位(256色)图像
    Mat myimg(256,256,CV_8UC3);
    //取像素数据首地址
    uchar* pxvec = myimg.ptr<uchar>(0);
    int i, j;
    for (i = 0; i < myimg.rows; i++)
    {
        pxvec = myimg.ptr<uchar>(i);
        //三通道数据都在第一行依次排列,按照BGR顺序
        //依次赋值为1
        for (j = 0; j < myimg.cols*myimg.channels(); j++)
        {
            pxvec[j] = 1;
        }
    }
    //展示图像
    imshow("abc", myimg); waitKey(10000);
}

结果如下:

原文:https://www.cnblogs.com/thundertt/p/6368754.html?utm_source=itdadao&utm_medium=referral

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值