您的位置:首页 > 其它

IplImage 类型与Mat 类型数据访问方法

2013-08-28 10:08 218 查看
IplImage*类型可以用宏定义:[b]CV_IMAGE_ELEM(image,elemtype,row,col);进行内部数据访问。[/b]

Mat 类型可以用Mat::[b]at<elemtype>(cvPoint(col,row));进行数据访问。[/b]

对于多通道图像,以3通道图像为例:

IplImage*类型:

CV_IMAGE_ELEM(image,elemtype,row,3*col);进行第一通道数据访问。

CV_IMAGE_ELEM(image,elemtype,row,3*col+1);[b]进行第二通道数据访问。[/b]

[b][b]CV_IMAGE_ELEM(image,elemtype,row,3*col+1);进行第三通道数据访问。
[/b][/b]

Mat 类型:

[b]Mat::at<elemtype>(cvPoint(3*col,row));[b]进行第一通道数据访问。[/b][/b]

Mat::at<elemtype>(cvPoint(3*col+1,row));进行第二通道数据访问。

[b]Mat::at<elemtype>(cvPoint(3*col+2,row));进行第三通道数据访问。
[/b]

程序例:(rgb三通道图像)

//opencv2.3.1版本

#include "opencv2/opencv.hpp"

int main()

{

IplImage*img=cvLoadImage("0.jpg");

Mat a(img);
printf("%d,%d,%d\n",a.at<uchar>(cvPoint(3*30,81)),a.at<uchar>(cvPoint(3*30+1,81)),a.at<uchar>(cvPoint(3*30+2,81)));
printf("%d,%d,%d\n",CV_IMAGE_ELEM(img,uchar,81,3*30),CV_IMAGE_ELEM(img,uchar,81,3*30+1),IplImage*img=cvLoadImage("0.jpg");
Mat a(img);
printf("%d,%d,%d\n",a.at<uchar>(cvPoint(3*30,81)),a.at<uchar>(cvPoint(3*30+1,81)),a.at<uchar>(cvPoint(3*30+2,81)));

printf("%d,%d,%d\n",CV_IMAGE_ELEM(img,uchar,81,3*30),CV_IMAGE_ELEM(img,uchar,81,3*30+1),CV_IMAGE_ELEM(img,uchar,81,3*30+2));(img,uchar,81,3*30+2));

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: