現在、FreeImageを使用して、IplImages(OpenCVの古いデータタイプ)を使用するプログラムにPFMをロードしています。ここに私がやっていることのサンプルがあります(imgがMatsの配列であることを無視してください、それは他のコードと関連しています)。奇妙な何FreeImageポータブルフロートマップ(PFM)RGBチャンネルオーダー
FIBITMAP *src;
// Load a PFM file using freeimage
src = FreeImage_Load(FIF_PFM, "test0.pfm", 0);
Mat* img;
img = new Mat[3];
// Create a copy of the image in an OpenCV matrix (using .clone() copies the data)
img[1] = Mat(FreeImage_GetHeight(src), FreeImage_GetWidth(src), CV_32FC3, FreeImage_GetScanLine(src, 0)).clone();
// Flip the image verticall because OpenCV row ordering is reverse of FreeImage
flip(img[1], img[1], 0);
// Save a copy
imwrite("OpenCV_converted_image.jpg", img[1]);
は、私が代わりにCV_8UにFIF_JPEGとCV_32FC3にFIF_PFMを変更することにより、JPEGファイルをロードするためにFreeImageを使用する場合、これはすなわち、コピーされた画像がそのまま出てくる、正常に動作していることです。これにより、OpenCVとFreeImageはRGBチャンネルの注文に一般的に合意していると思います。問題はPFMに固有であり、標準化されていない形式です。
私がロードしているPFMはthis code(Local Histogram Equalizationの下に)で書かれていますが、これは私が間違っているかもしれませんが、RGBオーダーで書いているようです。これは、MATLABの3Dマトリックスのdouble型からデータを取り出し、fwriteを使用してファイルにダンプします。また、PPMを書くためにそのコードを修正し、IrfanViewで表示すると、それらは正しく見えます。
FreeImageはファイルデータをディスク上でBGR順に並べていますが、そうでないはずです。
どのような考えですか? FreeImageのPFMの読み込みにエラーがありますか、ここではさらに微妙なことがありますか?ありがとう。