学不会啊~ 2023-02-15 16:19 采纳率: 37.5%
浏览 63
已结题

C++ opencv读.pfm

请问各位有没有用C++ opencv读.pfm代码,我从GitHub下载的几个在我这里运行不对

  • 写回答

2条回答 默认 最新

  • CodeBytes 2023-02-15 16:23
    关注

    该回答引用ChatGPT
    下面是一个简单的示例代码,可以读取.pfm文件并将其转换为OpenCV的Mat对象:

    #include <opencv2/opencv.hpp>
    #include <fstream>
    
    using namespace cv;
    using namespace std;
    
    Mat readPFM(const string& filename)
    {
        ifstream file(filename, ios::binary);
        if (!file)
        {
            cerr << "Error: could not open file " << filename << endl;
            return Mat();
        }
    
        string format;
        file >> format;
    
        if (format != "PF")
        {
            cerr << "Error: unsupported file format " << format << endl;
            return Mat();
        }
    
        int width, height;
        file >> width >> height;
    
        float scale;
        file >> scale;
    
        Mat image(height, width, CV_32FC3);
    
        file.ignore(1, '\n');
    
        for (int i = height - 1; i >= 0; i--)
        {
            float* row_ptr = image.ptr<float>(i);
            for (int j = 0; j < width; j++)
            {
                file.read(reinterpret_cast<char*>(row_ptr), sizeof(float) * 3);
                row_ptr += 3;
            }
        }
    
        file.close();
    
        return image;
    }
    
    int main()
    {
        Mat image = readPFM("example.pfm");
    
        if (image.empty())
        {
            return -1;
        }
    
        imshow("image", image);
        waitKey(0);
    
        return 0;
    }
    
    
    

    在这个示例中,readPFM()函数读取.pfm文件并返回一个OpenCV的Mat对象。要读取.pfm文件,需要使用ifstream类,它允许从文件中读取二进制数据。读取.pfm文件的第一行应该是文件格式,应该是字符串"PF"。接下来是宽度和高度,然后是缩放因子。最后,文件中的每个像素由三个32位浮点数表示(对于RGB图像)。由于.pfm文件中的像素从底部开始存储,因此在读取像素时需要从底部开始读取。

    在主函数中,我们只是调用readPFM()函数并显示读取的图像。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月24日
  • 创建了问题 2月15日

悬赏问题

  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)