使用指针的方式遍历图像数据
2015-11-30 22:08
148 查看
/******************************************* **** 第四讲 使用指针的方式遍历图像 **** ********************************************/ #include "cv.h" #include "highgui.h" #include <time.h> using namespace cv; using namespace std; /*** 遍历图像的每一个像素并将图像设置为白色 ***/ void setAllWhite(Mat& image) { int x, y; /********* 第一种方式 ************/ //for (y = 0; y < image.rows; y++) //{ // uchar* data = image.ptr<uchar>(y);//获取图像数据的指针,image有一个模板类 // //参数y说明,取的是图像的行指针 // //此时的data指向的是图像数据的第一行 // for (x = 0; x < image.cols; x++) // { // data[0] = 255; //由于对于三通道图像,每个像素有三个灰度值 // data[1] = 255; //因此在这里是分别对各个像素值的三通道灰度值 // data[2] = 255; //分别设定为白色 // data = data + 3; //完成一个像素值设定之后,要进行该行的下一个 // //灰度值的设定的话指针需要调到下一个像素的开始位置 // //此时指针需要偏置3个位置。 // } //} /********* 第二种方式 ***************/ //int rowLength = image.cols*image.channels(); //for (y = 0; y < image.rows; y++) //{ // uchar* data = image.ptr<uchar>(y);//获取图像数据的指针,image有一个模板类 // //参数y说明,取的是图像的行指针 // //此时的data指向的是图像数据的第一行 // for (x = 0; x < rowLength; x++) // { // data[0] = 255; //由于对于三通道图像,每个像素有三个灰度值 // // data[1] = 255; //因此在这里是分别对各个像素值的三通道灰度值 // // data[2] = 255; //分别设定为白色 // data++; //完成一个像素值设定之后,要进行该行的下一个 // //灰度值的设定的话指针需要调到下一个像素的开始位置 // //此时指针需要偏置3个位置。 // // *data++=255; //两种方式都可以 // } //} /******** 第三种方式 单层循环遍历图像数据 *********/ //注意能使用单层循环的原因,其本质还是图像数据在内存中的存储方式 //一般情况,图像数据在内存中都是连续存储的,但有时候行与行之间会 //有一些预留空间,这样在存储图像数据时,行与行之间的内存地址就 //不是连续的(在内存是否连续存储可以用isContinuous()来判断)。单层循环效率更高 //int x; int length = image.cols*image.channels()*image.rows; uchar* data = image.ptr<uchar>(0); for (x = 0; x < length; x++) { data[x] = 255; } } int main(int argc, char** argv) { Mat src; src = imread("G:/Learning/Machine_version/Photo/1.png"); namedWindow("SRC"); setAllWhite(src); imshow("SRC", src); waitKey(0); system("pause"); return 0; }
相关文章推荐
- 什么是对象?
- 20135310陈巧然家庭作业汇总[3.56 3.67 6.23 6.39.6.40 6.41]
- 欢迎使用CSDN-markdown编辑器
- 值得深思:美国感恩节78.3%的网购来自iOS
- git常用命令及技巧
- 特征表达——统计、hash、embedding
- 浅谈 Nim 中的“接口”
- JAVAWEB之自定义TAG开发二
- 终极解释: java方法传递参数的方式
- 第二个Sprint ------第四、五、六、七天
- 黑马程序员--集合框架(collection)
- 如何做一个匀速旋转的轮子
- 容器总结——无序容器
- 常用内部排序算法之一:归并排序
- Android常用控件之进度条(Progressbar)
- android 音视频直播
- jsp 百度编辑器配置 整合springmvc注意细节
- 快速排序--quickSort
- 递归
- Dropwizard(二) hibernate连接Mysql数据库