OpenCV(C ++) - 对彩色图像进行白化转换

时间:2017-03-10 01:49:51

标签: c++ opencv opencv3.0

是否有内置功能在具有3个通道的cv::Mat上应用白化转换? 我希望图像具有零均值单位方差

2 个答案:

答案 0 :(得分:0)

你想要的最接近的选项(我意识到)是使用cv::meanStdDev(它可以处理多通道图像),然后手动减去均值并除以每个通道的方差。

答案 1 :(得分:0)

cv::Mat Whiten(cv::Mat image)
{
    image.convertTo(image, CV_32F);

    cv::Mat mu, sigma;
    cv::meanStdDev(image, mu, sigma);

    std::vector<cv::Mat> channels;
    cv::split(image, channels);
    for (int i = 0; i < channels.size(); ++i)
        channels[i] = (channels[i] - mu.at<double>(i, 0)) / sigma.at<double>(i, 0);
    cv::merge(channels, image);

    return image;
}