zoukankan      html  css  js  c++  java
  • opencv再学习之路(七)---图像单个元素的访问

      1. RGB  图像的访问

      1)  迭代器访问

      对一个Mat 对象,创建一个 Mat::iterator 对象 iter ,通过 iter = Mat::begin() 获得首地址, Mat::end() 获得尾地址,it++ 来得到下一个像素的指向, (*it)[ ] 得到实际像素值

     1 Mat_<Vec3i>::iterator iter = outputImage.begin<Vec3i>();  
     2 Mat_<Vec3i>::iterator itend = outputImage.end<Vec3i>();  
     3       
     4     while (it != itend)  
     5     {  
     6                 //(*iter)[0]=0;  
     7                 //(*iter)[1]=0;  
     8                 //(*iter)[2]=0;  
     9                 //do something 
    10         iter++;  
    11     }      

      用法:(*iter)[0]代表当前像素单位的B位,(*iter)[1]代表当前像素单位的G位,(*iter)[2]代表当前像素单位的R位

      2) 动态访问

      对于一个Mat 对象,可以直接用 at() 函数来得到像素, Mat::at<Vec3b>(i,j)为一个像素点

     1 for (int i = 0; i < rowN; i++)  
     2     {  
     3         for (int j = 0; j < colNum; j++)        //这里colNum要注意,下面说明  
     4         {  
     5                         //mat.at<Vec3b>(i, j)[0]=0;   
     6                         //mat.at<Vec3b>(i, j)[1]=0;  
     7                         //mat.at<Vec3b>(i, j)[2]=0;  
     8             //do something with mat.at<Vec3b>(i, j)[0] mat.at<Vec3b>(i, j)[1] mat.at<Vec3b>(i, j)[2]  
     9         }  
    10     }  

      注意:这里的colNun为图像的像素点列数,不是实际数组列数,与第一种方法相反,colNum=mat.cols;        rowN通过rowN=mat.rows;得到

      用法:mat.at<Vec3b>(i,j)[0]表示i行j列像素的B位,mat.at<Vec3b>(i,j)[1]表示i行j列像素的G位,mat.at<Vec3b>(i,j)[2]表示i行j列像素的R位

      这种方法比较慢  

  • 相关阅读:
    [笔记] 深入java虚拟机 类型的生命周期
    xml笔记
    Python笔记
    Effective C++ 笔记(2)
    [笔记] 深入java虚拟机 连接模型
    javascript对象成员访问权限
    [笔记] 深入java虚拟机 java class文件(2)
    STL笔记(3) Effective STL
    STL笔记(1)容器
    [IOS笔记] objecttivec基础知识
  • 原文地址:https://www.cnblogs.com/zhp218/p/8625953.html
Copyright © 2011-2022 走看看