参考网址:
http://docs.opencv.org/modules/core/doc/basic_structures.html
http://docs.opencv.org/doc/user_guide/ug_mat.html
http://docs.opencv.org/trunk/opencv_cheatsheet.pdf
一、基本数据
在存取图像数据前,首先我们有必要了解OpenCV中定义的类Vec
二,加载图像
加载图像
Mat img = imread(filename)imread默认是读取图像文件,创建3通道图像数据。如果要创建单通道灰度图像,可用如下命令:
Mat img = imread(filename,0)
三、访问图像象元
访问图像数据时,需要特别注意数据类型。
对于单通道图像,我们要获取某个位置(y,x)的像素值,可采用如下语句:
Scalar intensity = img.at<uchar>(y, x);对3通道彩色图像有,我们可以采用如下的方式访问BGR数据:
Vec3b intensity = img.at<Vec3b>(y, x); uchar blue = intensity.val[0]; uchar green = intensity.val[1]; uchar red = intensity.val[2];类似的,对浮点型的3通道彩色图像,我们可以采用如下的方式访问BGR数据:
Vec3f intensity = img.at<Vec3f>(y, x); float blue = intensity.val[0]; float green = intensity.val[1]; float red = intensity.val[2];
除用下标访问之外,我们还可以采用迭代器访问:
Mat_<Vec3b>::iterator it = image.begin<Vec3b>(),itEnd = image.end<Vec3b>(); for(; it != itEnd; ++it){ uchar blue = (*it)[0]; uchar green = (*it)[1]; uchar red = (*it)[2]; }
如果要改变象元BGR分量的强度值,我们可以采用以下方式:
img.at<uchar>(y, x) = 128;
或者
for(int i = 0; i < 100; i++) img(i,i)=Vec3b(255,255,255);或者
Mat_<Vec3b>::iterator it = image.begin<Vec3b>(),itEnd = image.end<Vec3b>(); for(; it != itEnd; ++it){ *it=Vec3b(255,(*it)[1] ,(*it)[2] ); }
选定图像的感兴趣区域
Rect r(10, 10, 100, 100); Mat smallImg = img(r);
Mat img = imread("image.jpg"); IplImage img1 = img; CvMat m = img;
Mat img = imread("image.jpg"); // loading a 8UC3 image Mat grey; cvtColor(img, grey, CV_BGR2GRAY);从8UC1 到 32FC1:
src.convertTo(dst, CV_32F);
Mat img = imread("image.jpg"); namedWindow("image", CV_WINDOW_AUTOSIZE); imshow("image", img); waitKey();