2012-10-08 60 views
2

我在Android上使用此opencv代碼進行強度均衡。執行時間約爲每幀300ms(720x480)。有沒有人有一個可能的時間優化的想法?Opencv的代碼優化Android

下面是代碼:

 cvtColor(image, hsvImage, CV_BGR2HSV); 
     // Get intensity 
     intensity = hsvImage.at<Vec3b>((int)reference.Point_::y, (int)reference.Point_::x); 
     float value = (float)REGULAR_INTENSITY/intensity[2]; 
     float saturation = (float)REGULAR_SATURATION/intensity[1]; 
     if (counter == 15 && (int)intensity[2] < REGULAR_INTENSITY) { 
      equalization = false; 
     } 
     // Modify intensity 
     float transformedSaturation, transformedValue; 
     for(int i = 0; i < hsvImage.rows; i++) { 
      unsigned char *data = hsvImage.ptr(i); 
      for(int j = 0; j < hsvImage.cols; j++) { 
       transformedSaturation = (uchar)*++data * saturation; 
       if (transformedSaturation > MAX_COLOR) { 
        transformedSaturation = MAX_COLOR; 
       } 
       *data++ = transformedSaturation; 
       transformedValue = (uchar)*data * value; 
       if (transformedValue > MAX_COLOR) { 
        transformedValue = MAX_COLOR; 
       } 
       *data++ = transformedValue; 
      } 
     } 
     cvtColor(hsvImage, image, CV_HSV2BGR); 
+0

你發現哪一段代碼消耗大部分時間?在cvtColor和主循環上花了多少時間? – james

+0

最後一行:CV_HSV2BGR轉換。我認爲沒有什麼可以做的。 –

+1

考慮使用gpu :: cvtColor進行顏色轉換(如果適用)。 – remi

回答

2

您是否嘗試過用OpenCV的transform?我想它是優化的,但我不知道飽和演員陣容(即如果> max_color,那麼=最大顏色)

+0

謝謝,但正如你看到我乘以依賴於src數組的數組,它不是靜態的。 –

+0

正如我所看到的,您計算了Intensity,Value,Saturation的乘數,並使用這些值來均衡整個數據。所以你只需要創建一個1x3矩陣,用強度,飽和度和值填充它,然後調用cv :: transform! – remi