Opencv中访问图像数据类型
来源:互联网 发布:开展数据库培训 编辑:程序博客网 时间:2024/05/27 00:42
Opencv中访问数据类型,如下:
(1) 假设你要访问第k通道、第i行、第j列的像素。
(2) 间接访问: (通用,但效率低,可访问任意格式的图像)
对于单通道字节型图像:
IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);
CvScalar s;
s=cvGet2D(img,i,j); // get the (j,i) pixel value, 注意cvGet2D与cvSet2D中坐标参数的顺序与其它opencv函数坐标参数顺序恰好相反.本函数中i代表y轴,即height;j代表x轴,即weight.
printf("intensity=%f\n",s.val[0]);
s.val[0]=111;
cvSet2D(img,i,j,s); // set the (j,i) pixel value
对于多通道字节型/浮点型图像:
IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3);
CvScalar s;
s=cvGet2D(img,i,j); // get the (j,i) pixel value
printf("B=%f, G=%f, R=%f\n",s.val[0],s.val[1],s.val[2]);
s.val[0]=111;
s.val[1]=111;
s.val[2]=111;
cvSet2D(img,i,j,s); // set the (j,i) pixel value
(3) 直接访问: (效率高,但容易出错)
对于单通道字节型图像:
IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);
((uchar *)(img->imageData + i*img->widthStep))[j]=111;
对于多通道字节型图像:
IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3);
((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 0]=111; // B
((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 1]=112; // G
((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 2]=113; // R
对于多通道浮点型图像:
IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3);
((float *)(img->imageData + i*img->widthStep))[j*img->nChannels + 0]=111; // B
((float *)(img->imageData + i*img->widthStep))[j*img->nChannels + 1]=112; // G
((float *)(img->imageData + i*img->widthStep))[j*img->nChannels + 2]=113; // R
(4) 基于指针的直接访问: (简单高效)
对于单通道字节型图像:
IplImage* img = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1);
int height = img->height;
int width = img->width;
int step = img->widthStep/sizeof(uchar);
uchar* data = (uchar *)img->imageData;
data[i*step+j] = 111;
对于多通道字节型图像:
IplImage* img = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3);
int height = img->height;
int width = img->width;
int step = img->widthStep/sizeof(uchar);
int channels = img->nChannels;
uchar* data = (uchar *)img->imageData;
data[i*step+j*channels+k] = 111;
对于多通道浮点型图像(假设图像数据采用4字节(32位)行对齐方式):
IplImage* img = cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3);
int height = img->height;
int width = img->width;
int step = img->widthStep/sizeof(float);
int channels = img->nChannels;
float * data = (float *)img->imageData;
data[i*step+j*channels+k] = 111;
0 0
- Opencv中访问图像数据类型
- opencv中访问图像像素方式
- OpenCV图像中的数据类型
- Opencv图像数据类型
- OpenCV图像中的数据类型
- opencv中针对IplImage图像数据结构 怎么访问图像像素?
- OpenCV----访问图像元素
- opencv访问图像像素
- opencv访问图像
- opencv访问图像像素
- Opencv访问图像像素
- opencv访问图像数据
- 【OpenCV】访问图像中每个像素的值
- 【OpenCV】访问Mat图像中每个像素的值
- 【OpenCV】访问Mat图像中每个像素的值
- 【OpenCV】访问Mat图像中每个像素的值
- 【OpenCV】访问Mat图像中每个像素的值
- 【OpenCV】访问Mat图像中每个像素的值
- shell截取字符串的方法
- @PathVariable 中包含.等特殊字符异常
- 常用正则表达式
- 创建线程的几种方式
- Ubuntu+CUDA+OpenCV+Caffee安装
- Opencv中访问图像数据类型
- VR系列——Oculus最佳实践:一、最佳实践简介
- 1011. World Cup Betting
- 关于css渐变的一些收集
- 字符流中第一个不重复的字符
- Android Studio SVN使用
- 【Hibernate】——Junit测试
- iOS深入学习(Block全面分析)
- 1012. The Best Rank