opencv——操作图像中每一个像素
2016-07-21 19:32
260 查看
以下均针对opencv1.0
第一种方法:使用cvGet2D及cvSet2D
对于单通道图像:
对于多通道图像:
第二种方法:直接访问
对于单通道图像:
对于多通道图像:
多通道字节型:
多通道浮点型:
第三种方法:指针访问
对于单通道图像:
对于多通道字节型图像:
对于多通道浮点型:
第一种方法:使用cvGet2D及cvSet2D
对于单通道图像:
IplImage* img = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1); for (int i = 0; i < img->height; i++)//height对应图像的行 { for (int j = 0; j < img->width; j++)//width对应图像的列 { CvScalar s; //s = cvGet2D(img, i, j);// get the (i,j) pixel value s.val[0] = 255; cvSet2D(img, i, j, s);// set the (i,j) pixel value } }
对于多通道图像:
IplImage* img = cvCreateImage(cvSize(640, 480), IPL_DEPTH_32F, 3); for (int i = 0; i < img->height; i++)//height对应图像的行 { for (int j = 0; j < img->width; j++)//width对应图像的列 { CvScalar s; //s = cvGet2D(img, i, j);// get the (i,j) pixel value s.val[0] = 0;//B s.val[1] = 100;//G s.val[2] = 50;//R cvSet2D(img, i, j, s);// set the (i,j) pixel value } }
第二种方法:直接访问
对于单通道图像:
IplImage* img = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1); for (int i = 0; i < img->height; i++)//height对应图像的行 { for (int j = 0; j < img->width; j++)//width对应图像的列 { ((uchar*)(img->imageData + i*img->widthStep))[j] = 255;//img->imagedata是指向图像数据第一个像素的指针,widthStep是指每一行的像素所占的字节数 } }
对于多通道图像:
多通道字节型:
IplImage* img = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 3); for (int i = 0; i < img->height; i++)//height对应图像的行 { for (int j = 0; j < img->width; j++)//width对应图像的列 { ((uchar*)(img->imageData + i*img->widthStep))[j*img->nChannels + 0] = 0;//img->imagedata是指向图像数据第一个像素的指针,widthStep是指每一行的像素所占的字节数 ((uchar*)(img->imageData + i*img->widthStep))[j*img->nChannels + 1] = 100; ((uchar*)(img->imageData + i*img->widthStep))[j*img->nChannels + 2] = 50; } }
多通道浮点型:
IplImage* img = cvCreateImage(cvSize(640, 480), IPL_DEPTH_32F, 3); for (int i = 0; i < img->height; i++)//height对应图像的行 { for (int j = 0; j < img->width; j++)//width对应图像的列 { ((float*)(img->imageData + i*img->widthStep))[j*img->nChannels + 0] = 0;//img->imagedata是指向图像数据第一个像素的指针,widthStep是指每一行的像素所占的字节数 ((float*)(img->imageData + i*img->widthStep))[j*img->nChannels + 1] = 100; ((float*)(img->imageData + i*img->widthStep))[j*img->nChannels + 2] = 50; } }
第三种方法:指针访问
对于单通道图像:
IplImage* img = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1); for (int i = 0; i < img->height; i++)//height对应图像的行 { for (int j = 0; j < img->width; j++)//width对应图像的列 { int step = img->widthStep / sizeof(uchar); uchar*data = (uchar *)img->imageData; data[i*step + j] = 255; } }
对于多通道字节型图像:
IplImage* img = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 3); for (int i = 0; i < img->height; i++)//height对应图像的行 { for (int j = 0; j < img->width; j++)//width对应图像的列 { for (int k = 0; k < img->nChannels; k++)//width对应图像的列 { int step = img->widthStep / sizeof(uchar); int channels = img->nChannels; uchar*data = (uchar *)img->imageData; data[i*step + j*channels+k] = 255; } } }
对于多通道浮点型:
IplImage* img = cvCreateImage(cvSize(640, 480), IPL_DEPTH_32F, 3); for (int i = 0; i < img->height; i++)//height对应图像的行 { for (int j = 0; j < img->width; j++)//width对应图像的列 { for (int k = 0; k < img->nChannels; k++)//width对应图像的列 { int step = img->widthStep / sizeof(float); int channels = img->nChannels; float*data = (float *)img->imageData; data[i*step + j*channels+k] = 255; } } }
相关文章推荐
- OpenLayers系列之-Geometry格式转换
- centos7上memcahed安装
- Linux Firewall ---iptables
- Nginx配置文件详细说明
- docker cgroup 资源监控 术语解析
- 关于Xutils框架出现无法访问HttpRequestBase 找不到org.apache.http.client.methods.H...
- UVA - 10152 ShellSort
- Linux下安装jdk
- opencv-SURF特征描述
- Tomcat7配置数据源
- bzoj 1711: [Usaco2007 Open]Dining吃饭
- opencv-角点检测
- hdfs api 操作
- linux 下查看机器是cpu是几核的
- 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
- 使用Eclipse进行Java Web项目开发注意事项-Tomcat配置
- 模块化开发一个电子商务网站
- Apache POI的小测试
- Linux下查看文件和文件夹大小命令简述
- 虚拟机中安装Linux系统