OpenCV 灰度调色的几种方法

来源:互联网 发布:网店代运营知乎 编辑:程序博客网 时间:2024/06/05 20:05

 实现灰度反转即

Mat table(1, 256, CV_8U);   uchar* p = table.data;   for( int i = 0; i < 256; ++i)      p[i] = 255-i;  
 1.指针实现较高效

Mat& ScanImageAndReduceC(Mat& I, const uchar* const table)   {      CV_Assert(I.depth() != sizeof(uchar));      int channels = I.channels();      int nRows = I.rows;      int nCols = I.cols * channels;      if (I.isContinuous())      {          nCols *= nRows;          nRows = 1;      }      int i,j;      uchar* p;      for( i = 0; i < nRows; ++i)      {          p = I.ptr<uchar>(i);          for ( j = 0; j < nCols; ++j)          {              p[j] = table[p[j]];          }      }   return I;   }  
2.迭代器较安全

Mat& ScanImageAndReduceIterator(Mat& I, const uchar* const table)   {      CV_Assert(I.depth() != sizeof(uchar));      const int channels = I.channels();      switch(channels)      {          case 1:          {              MatIterator_<uchar> it, end;              for( it = I.begin<uchar>(), end = I.end<uchar>(); it != end; ++it)              {                *it = table[*it];                  break;              }          case 3:          {              MatIterator_<Vec3b> it, end;              for( it = I.begin<Vec3b>(), end = I.end<Vec3b>(); it != end; ++it)              {                 (*it)[0] = table[(*it)[0]];                  (*it)[1] = table[(*it)[1]];                  (*it)[2] = table[(*it)[2]];              }          }      }      return I;   }  

 3.LUT函数 推荐

Mat& ScanImageAndReduceLUT(Mat& I,const unchar* const table)   {      Mat J;      LUT(I, table, J);      return J;   }  




原创粉丝点击