OpenCV直方图匹配/规范

时间:2016-03-18 11:35:34

标签: c++ histogram opencv3.0

我有两张灰度图像,我想将一张图像的直方图复制到另一张图像。由于我正在使用OpenCv,因此我尝试了此方法histogram recoloring和此histogram for gray scale images。第一个链接没有给我任何结果,而第二个链接返回此图像: 参考图片: Reference Image 输入图片: Input Image 结果图: Result image

根据灰度直方图匹配的代码,我不得不实现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);
            }
        }

    }

而另一个功能是从这里挑选的:how to scan images

如何将一张图像的直方图成功复制到另一张图像? 我正在使用OpenCV 3.1 谢谢!

1 个答案:

答案 0 :(得分:1)

我也试图解决问题,我发现你的功能中的错误&#34; cumsum&#34;。&#34; cumsum&#34;应该写成:

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;
}