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));
}
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));
}
相关文章推荐
- opencv Mat 类型数据传递,出现访问冲突,有解决方法,但不知原因
- 大津阈值OSTU函数实现方法对比, Mat转换为IplImage 类型,并复制数据
- JNI语法之数据类型和C访问Java属性和方法
- OpenCV不同类型Mat的at方法访问元素时该如何确定模板函数的typename
- Mat数据类型与访问
- opencv2.x新数据结构cv::Mat访问元素的方法
- Mat和IplImage访问像素的方法总结
- JNI 之数据类型与属性和方法的访问
- Mat转化为IplImage类型的方法
- OpenCV中Mat与IplImage和CvMat数据类型间的相互转换
- OpenCV中Mat与IplImage和CvMat数据类型间的相互转换
- opencv2.x新数据结构cv::Mat访问元素的方法
- Opencv--Mat,IplImage数据类型
- 访问cv::Mat中的数据时遇到的指针类型问题
- 访问cv::Mat中的数据时遇到的指针类型问题
- opencv 数据类型转换:CvArr, Mat, CvMat, IplImage, BYTE 转
- Android 通过jni返回Mat数据类型方法
- spring mvc 注解访问控制器以及接收form数据的方式,包括直接接收日期类型及对象的方法
- OpenCV探索之路(十七):Mat和IplImage访问像素的方法总结
- OpenCV几种访问cv::Mat数据的方法