2017-10-06 7 views
1

J'écris un programme pour créer un histogramme pour l'image grise en utilisant des valeurs de données de pixels. J'ai utilisé le segment de code ci-dessous pour augmenter le contraste de l'image accédant aux valeurs de pixels. Comment puis-je appliquer cette logique pour colorier l'image pour augmenter le contraste de l'image. gr est l'image grise (convertir de l'image couleur) et gr_im est une nouvelle image.Histogramme d'image couleur RVB pour l'étirement du contraste avec OpenCV C++

int x = 0; 
    for (int i = 0; i < h; i++) 
    { 
     for (int j = 0; j < w; j++) 
     { 
      x = gr.at<uchar>(i,j); 
      if (x < r1) 
      { 
       gr_im.at<uchar>(i, j) = cvRound((s1/double(r1))*double(x)); 
      } 
      else if(x <= r2){ 
       gr_im.at<uchar>(i, j) = cvRound((s2-s1/double(r2-r1))*(x-r1) + s1); 
      } 
      else if (x > r2) { 
       gr_im.at<uchar>(i, j) = cvRound((255-s2/double(r1))*(x - r2) + s2); 
      } 
     } 
    } 
+0

Convertir l'image RVB en gris espace couleur segmenté comme 'LAB',' 'YCrCb' ou HSV', appliquez votre contraste étirement algorithme 'L',' Y' ou 'V' canal respectivement, puis encore le convertir en RVB. – ZdaR

+0

Merci. Je vais l'essayer –

Répondre

1

Vous pouvez utiliser quelque chose comme le code ci-dessous:

cv::Mat hsv; 
cv::cvtColor(image, hsv, CV_BGR2HSV); 
std::vector<cv::Mat> channels; 
cv::split(hsv, channels) 

// now call your function to specific channel 

cv::merge(channels, hsv); 
cv::cvtColor(hsv, image, CV_HSV2BGR); 
+0

Celui-ci est correct. Mais j'ai besoin de faire ce processus en accédant à chaque pixel de l'image. Je vous remercie! –