OpenCV--用读取矩阵,访问图像数据
2011-09-29 19:33
246 查看
View Code
int _tmain(int argc,_TCHAR* argv[]) { //用固定数据创建一个矩阵 float vals[]={0.664,-0.500,0.500,0.866}; CvMat rotmat; cvInitMatHeader(&rotmat,2,2,CV_32FC1,vals); int number = cvGetDims(&rotmat,0); CvMat* mat = cvCreateMat(5,5,CV_32FC1); //用简单方法对矩阵数据存取。 //方法一 float element_3_2 = CV_MAT_ELEM(*mat,float,3,2); //方法二 float element_3_2_ptr = 7.7; *((float*)CV_MAT_ELEM_PTR(*mat,3,2))=element_3_2_ptr; /************************************************************************/ /* 以上方法利用宏进行存取数据。但是,宏在每次调用的时候都重新计算指针。 这意味着要查找指向矩阵基本元素数据区的指针,计算目标数据在矩阵中的相对地址,然后将相对位置与基本位置相加。 因此这不是一个很好的存取矩阵的方法。在计算顺序访问矩阵的所有元素时,这种方法的缺点尤为突出。 并且方法一,方法二只适用于访问1维或者2维的数组。 */ /************************************************************************/ } //累加一个三通道矩阵中的所有元素 float sum(const CvMat* mat) { float s=0.0f; for(int row=0;row<mat->rows;row++) { const float* prt=(const float*)(mat->data->ptr+row*mat->step); for (int col=0;col<mat->cols;col++) { s+=*prt++; } } return (s); } //矩阵的元素data是一个联合体。所以对这个指针解引用时,必须指明结构体中的正确的元素以便得到正确的指针类型。 //为了参数正确的偏移必须用矩阵的行数据长度step元素。 //仅最大化HSV图像“S”和“V”部分 //指针ptr指向第y行的起始位置。接着从指针中析出饱和度和高度在x维的值。因为这是一个三通道图像,所以c通道在x列的位置为3*x+c。 void saturate_sv(IplImage* img) { for(int y=0;y<img->height;y++) { uchar* ptr=(uchar*)( img->imageData+y*img->widthStep ); for (int x=0;x<img->width;x++) { ptr[3*x+1]=255; ptr[3*x+2]=255; } } }
相关文章推荐
- 获取BMP图像的数据(以数组矩阵形式读取出来)&&将数组矩阵数据转成BMP图像
- 使用GDI+可以方便的把OpenCV的图像矩阵类型数据显示在MFC的窗口中
- OpenCV中double和float类型图像数据的访问
- MFC学习(6)——以数组矩阵形式表示读取出来的BMP图像||将数组矩阵数据转成BMP图像
- OpenCV 矩阵数据访问方法
- opencv 使用Mat 矩阵进行图像的降采样,像素的访问方式
- OpenCV中矩阵数据的访问(二)(Learning OpenCV第三章3)
- opencv里常用的访问图像像素数据方法
- opencv-python图像数据的读取
- opencv中imread读取不了图像数据问题解决
- OpenCV学习笔记——使用OpenCV访问图像数据
- Opencv中访问图像数据类型
- python中opencv读取RGB图像存储的矩阵,颜色通道顺序是B,G,R。
- opencv学习笔记(七)-CvMat矩阵结构以及矩阵数据访问
- opencv中读取图像像素数据的问题
- opencv系列二---读取矩阵数据
- 用固定数据创建一个Opencv矩阵并访问其数据元素
- opencv读取图像数据的方式总结
- OpenCV中矩阵数据的访问(二)
- 第四篇 学习OpenCV之访问图像数据