首页 > 代码库 > OpenCV中对Mat的遍历访问与赋值
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); }
结果如下:
OpenCV中对Mat的遍历访问与赋值
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。