【问题标题】:OpenCV Histogram Matching/SpecificationOpenCV 直方图匹配/规范
【发布时间】:2016-03-18 11:35:34
【问题描述】:

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

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

【问题讨论】:

  • @Miki 我的意思是获取图像的直方图并将其应用于另一张图像!
  • @Miki 我的意思是,在这个过程之后,两个图像都有相同的直方图!

标签: c++ histogram opencv3.0


【解决方案1】:

我也在尝试解决这个问题,我发现你的函数“cumsum”的错误。“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;
}

【讨论】:

  • 我会尽力让你知道的!
猜你喜欢
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
  • 2018-09-21
  • 2014-10-04
  • 2018-12-29
  • 1970-01-01
相关资源
最近更新 更多