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