1. 程式人生 > >Opencv遍歷畫素和imadjust函式實現

Opencv遍歷畫素和imadjust函式實現

Opencv遍歷畫素有四種方式

第一種

利用opencv中

    for (int i = 0; i < nrow; i++)     {         for (int j = 0; j < ncol; j++)         {             //qDebug() << "original pixel is" << source.at<uchar>(i, j);             source.at<uchar>(i, j) = uchar(fn(source.at<uchar>(i, j), low_in, high_in, low_out, high_out));             //qDebug() << "processed pixel is" << source.at<uchar>(i, j);                      }     }

第二種

    for (int i = 0; i < nrow; i++)     {         uchar* data = source.ptr<uchar>(i);         for (int j = 0; j < ncol; j++)         {             data[j] = uchar(fn(data[j], low_in, high_in, low_out, high_out));         }     }

 第三種

    if (source.isContinuous())     {         nc = nrow * ncol;         uchar* inData = source.ptr<uchar>(0);         for (int i = 0; i < nc; i++)         {             *inData = fn(*inData, low_in, high_in, low_out, high_out);             inData++;         }     }

影象IMadjust利用lambda表示式

     auto fn = [](double x, double low_in, double high_in, double low_out, double high_out) {         if (x < low_in)             return low_out;         if (x > high_in)             return high_out;         return (high_out - high_in) / (low_out - low_in)*(x - low_in) + high_in;     };

整體測試結果對於4000*6000大小的圖片,三種方法的用時分別為0.873s,0.203s,0.195s