OpenCV Tutorial: 像素巡訪(at、ptr)
来源:互联网 发布:索尼z3v电信4g网络 编辑:程序博客网 时间:2024/05/28 04:54
像素巡訪(at、ptr)
當我們進行影像處理時,可能有操作是要查訪所有像素,比如說我們想要改變一張影像的灰階值,讓所有的像素值加20,這時我們就需掃過影像所有的像素,這邊介紹OpenCV的at()和ptr()函式以及迭代器,來查訪Mat所有像素。
at()可用來讀取和修改某個像素值,通常用來對隨機位置的像素進行讀寫,就效率考量,並不適合用在循序查訪影像所有像素,以下用at()來讀取img的所有像素,並讓所有像素值加20:
int widthLimit = img.channels() * img.cols;for(int height=0; height<img.rows; height++){ for(int width=0; width<widthLimit; width++){ img.at<uchar>(height, width) += 20; }}
ptr()函式返回指標,指向影像指定列的首像素,使用時須輸入像素位元深度和第幾列,對於一個深度8位元的圖,我們可用img.ptr(j)指到第j列的第一個像素,接著逐列查訪,最後可查訪影像所有像素,這種方法運行速度較at()快,在解析度大或是重視效率的地方,是比較好的方法,以下用ptr()來讀取img的所有像素,並讓所有像素值加20:
int widthLimit = img.channels() * img.cols;for(int height=0; height<img.rows; height++){ uchar *data = img.ptr<uchar>(height); for(int width=0; width<img.widthLimit ; width++){ data[width] += 20; }}
OpenCV有為Mat提供了與STL迭代器兼容的迭代器,使用時須指定影像數據類型,以下用迭代器來讀取img的所有像素,並讓所有像素值加20:
if(img.channels()==1){ Mat_<uchar>::iterator it = img.begin<uchar>(); Mat_<uchar>::iterator itend = img.end<uchar>(); for(;it!=itend;it++){ (*it) = (*it) + 20; }}if(img.channels()==3){ Mat_<Vec3b>::iterator it = img.begin<Vec3b>(); Mat_<Vec3b>::iterator itend = img.end<Vec3b>(); for(;it!=itend;it++){ (*it)[0] = (*it)[0] + 20; (*it)[1] = (*it)[1] + 20; (*it)[2] = (*it)[2] + 20; }}
0 0
- OpenCV Tutorial: 像素巡訪(at、ptr)
- 像素巡訪(at、ptr)
- Opencv中at<> 与ptr<> 的不同
- OpenCV Tutorial: 像素強度變換(convertTo)
- Opencv中用at<格式> 与用ptr<格式> 的不同
- opencv像素基本操作及图像遍历at
- OpenCV坐标体系介绍以及像素点at操作讲解
- opencv动态地址方式操作像素-at操作
- OpenCV坐标体系介绍以及像素点at操作讲解
- 用动态地址计算配合at访问像素OPENCV
- opencv像素基本操作及图像遍历at
- opencv像素基本操作及图像遍历at
- opencv 智能指针 Ptr
- OpenCV中的Ptr解析
- opencv Ptr源码分析
- OpenCV的智能指针: Ptr
- OpenCV Tutorial: OpenCV介紹
- OpenCV Mat数据类型指针ptr的使用
- static 关键字和final关键字
- 杨氏矩阵
- 文件上传
- ffmpeg使用二:录屏数据直接264编码
- 利用ViewPager实现轮播图
- OpenCV Tutorial: 像素巡訪(at、ptr)
- android studio 集成JPush遇到的坑
- CNN网络结构 - Refining Architectures of Deep Convolutional Neural Networks
- android achartengine使用
- JavaWeb -- 文件上传下载示例
- AndroidStudio报错 Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
- 第26课:Scala的核心力量和黄金定律
- KVC/KVO 进阶(三)KVC的验证和异常处理
- appStore 开发者账号申请 与区别