访问彩色像素的理解及疑惑
2015-12-10 21:21
288 查看
在访问图像像素opencv提供了基本的三种方式:
一、指针
二、迭代
三、at()函数
下面就使用at()函数遇到的问题说一说,希望能帮到人,同时也希望有大神给透彻分析一下。
成功例子:
具体的针对单个像素的操作:
一、指针
二、迭代
三、at()函数
下面就使用at()函数遇到的问题说一说,希望能帮到人,同时也希望有大神给透彻分析一下。
成功例子:
#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { //Mat img = imread("Lena.jpg");直接采用imread()函数就会报内存读取错误,没找出来原因。 IplImage *image = cvLoadImage("E:\\···Lena.jpg"); Mat img(image,true); //转换成Mat类型 if (!img.data) { cout<<"Error"; } for (int i=0;i<img.rows;i++) { for (int j=0;j<img.cols;j++) {//彩色图像分为三个通道,每个像素值由三个分量组成 Vec3b pixe; pixe[0] = i%255; pixe[1] = j%55; pixe[2] = 200;//分别设置三个分量的值,并把值存到容器中 img.at<Vec3b>(i,j) = pixe;//此处对每个像素赋值 } } imshow("img",img); waitKey(0); return 0; }
具体的针对单个像素的操作:
#include <iostream> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> using namespace std; using namespace cv; const int num = 300; void salt_pepper(Mat &img) { for (int i=0;i<num;i++) { int x = rand() % 255; int y = rand() % 255; if (img.channels() == 3) { img.at<Vec3b>(x,y)[0] = 255; img.at<Vec3b>(x,y)[1] = 255; img.at<Vec3b>(x,y)[2] = 255; } } } int main() { Mat img = imread("Lena.jpg"); if (!img.data) { cout<<"error"; } salt_pepper(img); imshow("salt_pepper",img); waitKey(0); return 0; }
相关文章推荐
- poj--1300
- 打印图形
- Objective-C 歌词解析
- android学习笔记——创建自定义控件
- EF+MVC+Bootstrap 项目实践 Day2
- 高中数学必修5 之 数列
- Android环境搭建-20151210
- 替换空格
- java解惑--谜题8:Dos Equis
- SpringMVC+Hibernate4 导致事务失效不提交的可能原因
- swift 学习资源 大集合
- Objective-C歌词解析
- (转) 中断处理程序&中断服务例程
- 后台多任务多线程断点下载
- Java综述
- 路由器配置Stub后 邻接关系建立失败
- C++中的萃取机制(traits)
- vs2010说明
- OSPF网络规划
- Javascript设计模式理论与实战:简单工厂模式