我有两张灰度图像,我想将一张图像的直方图复制到另一张图像。由于我正在使用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 谢谢!
答案 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;
}