我正在尝试使用 C++ 的 OpenCV(2.4.0) 加载和显示 .PGM 图像。
void open(char* location, int flag, int windowFlag)
{
Mat image = imread(location, flag);
namedWindow("Image window", windowFlag);
imshow("Image window", image);
waitKey(0);
}
我这样称呼开放:
open("./img_00245_c1.pgm", IMREAD_UNCHANGED, CV_WINDOW_AUTOSIZE);
问题是打开窗口时显示的图像比使用 IrfanView 打开文件时显示的图像更暗。另外,如果我尝试将此图像写入另一个文件,如下所示:
Mat imgWrite;
imgWrite = image;
imwrite("newImage.pgm", imgWrite)
我将获得与原始文件不同的文件内容,并且 IrfanView 将在我的函数使用 imshow 显示时显示此内容。
.PGM 文件的 imread 中是否有不同的标志,以便我可以显示和保存原始文件?
编辑:图像pgm 文件
编辑 2:备注: IrfanView 将图像标准化为最大像素值 255 。为了使用 OpenCV 清楚地看到图像,我应该在加载 Mat 时对图像进行归一化。这是否可以直接使用 OpenCV 函数而无需遍历像素并修改它们的值?