在opencv中规范化图像
Normalising an image in opencv
我有一个RGB图像存储在Mat数据结构中。我正在使用opencv中的cvtColor函数将图像转换为灰度。在那之后,我试图将图像归一化到[0,1]的范围。我使用的是opencv的默认normalize函数。为了检查正确性,我尝试打印像素值,并将其与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.587*G+0.1140*B。因此,在输出灰度图像中,不希望最小值为0.0或最大值为1.0。如果你有纯白色(255255255)和纯黑色(0,0,0)像素,你只会期望0和1。
试试这个:
img *= 1./255;
cvtColor(img, img, CV_BGR2GRAY);
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 平均图像时图像损坏
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- 将RGB图像保存为PPM格式
- 将图像添加到资源文件夹UWP C++
- 彩色图像的卤化物处理平均值
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 重新定位图像时如何前进到下一个内存块
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 为什么 BMP 图像上的 imwrite 会卡住/不返回?
- Gstreamer:每 5 秒使用多文件墨水保存图像/jpeg
- 如何使用CImg打开图像?
- 规范化图像描述符OpenCV Java
- 在opencv中规范化图像