美文网首页
cv cpp 归一化 rgb 图片

cv cpp 归一化 rgb 图片

作者: 谢小帅 | 来源:发表于2019-05-05 19:50 被阅读0次
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace std;
using namespace cv;

// define an array
static const float norm_means[] = {0.406, 0.456, 0.485};
static const float norm_stds[] = {0.225, 0.224, 0.229};


int main() {
    // read img
    cv::Mat src = cv::imread("/home/nvidia/CLionProjects/BiSeNet/img/lab/rgb/0.jpg");
    src.convertTo(src, CV_32F); // default uchar -> float32
    src /= 255; // divide to [0, 1]

    // As mean changes when / std, we can't get mean and std here.
    vector<cv::Mat> channels;
    cv::split(src, channels); // split to R, G, B
    cv::Scalar means, stds; // store mean,std of each channel
    for (int i = 0; i < 3; ++i) {
        cv::Mat a = channels[i]; // b
        cv::meanStdDev(a, means, stds); // compute mean,std
        a = a / stds.val[0] * norm_stds[i]; // change std, mean also change
        means = cv::mean(a); // recompute mean!
        a = a - means.val[0] + norm_means[i]; // move distribution
        channels[i] = a;
    }

    // test result
    cv::Mat norm_src;
    cv::merge(channels, norm_src); // merge channels to bgr
    cv::meanStdDev(norm_src, means, stds);
    for (int i = 0; i < 3; ++i) {
        cout << means.val[i] << ", " << stds.val[i] << endl;
    }
    return 0;
}
0.406, 0.225
0.456, 0.224
0.485, 0.229

相关文章

网友评论

      本文标题:cv cpp 归一化 rgb 图片

      本文链接:https://www.haomeiwen.com/subject/ryqkoqtx.html