#pragma omp parallel for private(valueB,valueG,valueR) reduction(+:lAB) schedule(static,1) for (int j = 0; j < ptrImage->imageSize; j = j+3) { valueB = ptrImage->imageData[j]; valueG = ptrImage->imageData[j+1]; valueR = ptrImage->imageData[j+2]; lAB += (int)(valueR * 0.299 + valueG * 0.587 + valueB * 0.114); } // lAB /= imageRows * imageCols;
// double k = 1.0 + correction / 100.0; for (int i = 0; i < 256; i++) { int delta = (int)i - lAB; int temp = (int)(lAB + k *delta); if (temp < 0) temp = 0; if (temp >= 255) temp = 255; b[i] = (unsigned char)temp; }
#pragma omp parallel for firstprivate(b) for (int j = 0; j < ptrImage->imageSize; j++) { unsigned char value = ptrImage->imageData[j]; ptrImage->imageData[j] = (unsigned char)b[value]; }
const int L = 256; void AddContrastFilter(IplImage* ptrImage, int _correction) { // 4, omp_set_num_threads(4); int correction = _correction; // int b[L]; // int imageRows = ptrImage->height; int imageCols = ptrImage->width; int lAB = 0; unsigned char valueB = 0; unsigned char valueG= 0; unsigned char valueR= 0; // #pragma omp parallel for private(valueB,valueG,valueR) reduction(+:lAB) schedule(static,1) for (int j = 0; j < ptrImage->imageSize; j = j+3) { valueB = ptrImage->imageData[j]; valueG = ptrImage->imageData[j+1]; valueR = ptrImage->imageData[j+2]; lAB += (int)(valueR * 0.299 + valueG * 0.587 + valueB * 0.114); } // lAB /= imageRows * imageCols; // double k = 1.0 + correction / 100.0; //RGB for (int i = 0; i < L; i++) { int delta = (int)i - lAB; int temp = (int)(lAB + k *delta); if (temp < 0) temp = 0; if (temp >= 255) temp = 255; b[i] = (unsigned char)temp; } #pragma omp parallel for firstprivate(b) for (int j = 0; j < ptrImage->imageSize; j++) { unsigned char value = ptrImage->imageData[j]; ptrImage->imageData[j] = (unsigned char)b[value]; } return 0; }
Source: https://habr.com/ru/post/139428/
All Articles