在opencv中规范图像

我有一个存储在Mat数据结构中的RGB图像。 我正在使用opencv中的cvtColor函数将图像转换为灰度。 之后,我试图将图像标准化到范围[0,1]。 我正在使用opencv的默认标准化函数。 为了检查正确性,我尝试打印像素值并将其与matlab值相等(Matlab值已经在[0,1]范围内)。 但是这些数值差异很大。 帮助我使两个结果几乎相同。 以下是opencv和matlab代码。

Mat img1 = imread("D:/input.png", CV_LOAD_IMAGE_COLOR);
cvtColor(img1, img1, CV_BGR2GRAY);
img1.convertTo(img1, CV_32FC1);
cv::normalize(img1, img1, 0.0, 1.0, NORM_MINMAX, CV_32FC1);
for (int i = 0; i < img1.rows; i++)
{
    for (int j = 0; j < img1.cols; j++)
    {
       cout << img1.at<float>(i, j) << endl;
    }
}

Matlab代码:

 I=im2double(imread('input.png'));
 gI=rgb2gray(I);
 display(gI)

我不认为你想在这里正常化。 Matlab转换rgb2gray使用以下公式:0.2989 * R + 0.5870 * G + 0.1140 * B因此,您不希望您的输出灰度图像中的最小值为0.0或最大值为1.0。 如果您有纯白色(255,255,255)和纯黑色(0,0,0)像素,则只能预期0和1。

尝试这个:

img *= 1./255;
cvtColor(img, img, CV_BGR2GRAY);
链接地址: http://www.djcxy.com/p/89791.html

上一篇: Normalising an image in opencv

下一篇: Normalizing color channels of and image by intensity values, OpenCV