2016-03-18 2 views
1

У меня есть два изображения с серой шкалой, и я хочу скопировать гистограмму одного изображения в другое. Поскольку я работаю с OpenCv, я пробовал использовать этот метод histogram recoloring и этот histogram for gray scale images. Первая ссылка не дает мне никаких результатов, в то время как второй возвращение это изображение: эталонное изображение: Reference Image входного изображения: Input Image изображение Результат: Result imageСоответствие/спецификация гистограммы OpenCV

По коду полутонового согласования гистограммы, я должен был осуществлять cumsum и ScanImageAndReduceC функции:

cumsum: 
for (size_t i = 0; i < X.rows; i++) 
    { 
     for (size_t j = 0; j < X.cols; j++) 
     { 
      if (j == 0) 
      { 
       result.at<double>(i, j) = X.at<double>(i, j); 
      } 
      else 
      { 
       result.at<double>(i, j) = X.at<double>(i, j) + result.at<double>(i, j - 1); 
      } 
     } 

    } 

, а другой functin был выбран здесь: how to scan images.

Как я могу успешно скопировать гистограмму одного изображения в другое? Я использую OpenCV 3.1 Спасибо!

+0

@Miki Я имею в виду, чтобы взять гистограммы изображения и применения его к другому изображению! – bjorn

+1

@Miki Я имею в виду, что после процедуры оба изображения имеют одну и ту же гистограмму! – bjorn

ответ

1

Я также пытаюсь решить эту проблему, и я нахожу ошибку в вашей функции «cumsum» .The функции «cumsum» должно быть написано как:

Mat cumsum (Mat & src) 
{ 
    Mat result = Mat::zeros(Size(src.cols,src.rows),CV_32FC1);  
    for (int i = 0; i < src.rows; ++i) 
    { 
    for (int j = 0; j < src.cols; ++j) 
    { 
     if (i == 0) 
     { 
      result.at<float>(i, j) = src.at<float>(i, j); 
     } 
     else 
     { 
      result.at<float>(i, j) = src.at<float>(i, j) + result.at<float>(i-1, j); 
     }    

     } 

    } 

return result; 
} 
+0

Я попробую и дам вам знать! – bjorn

Смежные вопросы