IplImage\Mat\CvMat像素处理

本文详细介绍了OpenCV中三种基本的矩阵结构:IplImage、Mat和CvMat的使用方法,包括创建图像、处理像素及矩阵运算等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

opencv中三种基本的矩阵结构,IplImage和Mat用于读取图像,CvMat用于矩阵运算,下面总结其用法,可能总结不全,敬请谅解。

1 、IplImage对像素处理
1. 创建一副单通道字节性图像,令其像素全为黑

 IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);
 for (int i=0;i<img->height;i++)
 {
  for (int j=0;j<img->width;j++)
  {
   ((uchar*)img->imageData+i*img->widthStep)[j]=255;
  }
 }
  1. 创建多通道字节型图像
 IplImage* img1=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);
 for (int i=0;i<img1->height;i++)
 {
  for (int j=0;j<img1->width;j++)
  {
   ((uchar*)img1->imageData+i*img1->widthStep)[j*img1->nChannels+0]=100;//B
   ((uchar*)img1->imageData+i*img1->widthStep)[i*img1->nChannels+1]=100;//G
   ((uchar*)img1->imageData+i*img1->widthStep)[i*img1->nChannels+2]=100;//R
  }
 }
  1. 基于指针的直接访问,也是我最喜欢的用法
 IplImage* img2=cvCreateImage(cvSize(240,160),IPL_DEPTH_8U,1);
 int height=img2->height;
 int width=img2->width;
 int step=img2->widthStep/sizeof(uchar);
 uchar* data=(uchar*)img2->imageData;//指向首地址
 for (int i=0;i<height;i++)
 {
  for (int j=0;j<width;j++)
  {
   data[i*step+j]=128;
  }
 }

2、Mat像素处理
1. 利用at()函数处理
对于灰度图,获取i行j列的像素,令其等于255

 image.at<uchar>(j,i)=255

彩色图

 image.at<cv::Vec3b>(j,i)[0]=255 ;
  image.at<cv::Vec3b>(j,i)[1]=255 ;
 image.at<cv::Vec3b>(j,i)[1]=255 ;

2 指针遍历像素,获取j行的首地址(推荐)

uchar *data = image.ptr<uchar>(j) ;
j行i列的像素值为data[i]

3 底层指针运算

获得j行,i列的像素地址

uchar *data = image.data + j*image.step + i *image.elemSize() ;

3 、CvMat处理

1. 利用CV_MAT_ELEM宏访问
 ```
 int A[]={1,2,3,4};
 CvMat mat=cvMat(2,2,CV_32S,A);
  cout<<CV_MAT_ELEM(mat,int,1,1)<<endl;

2 利用cvGetReal2D()访问

 cout<<cvGetReal2D(&mat,1,1);

3 利用指针访问

 for (int i=0;i<mat.rows;i++)
 {
  int *pData=(int*)(mat.data.ptr+i*mat.step);
  for (int j=0;j<mat.cols;j++)
  {
   cout<<*pData<<" ";
   pData++;
  }
  cout<<endl;
 }

“`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值