利用c++/opencv读取并显示raw图像

raw图像(本文是raw8),opencv的imread不支持直接读入,但可以通过c++的ifstream读入。

注意的一点是,读取时,mode要设置成std::ios::binary,即把raw图像当做二进制文件读入。

读取后,构造opencv mat,并显示出来,代码如下:

   // open raw data
    const std::string file_path = "/home/zhangshan/image/image.raw";
    std::ifstream fin;
    // 注意,这里要指定binary读取模式
    fin.open(file_path,  std::ios::binary);
    if (!fin) {
        std::cerr << "open failed: " << file_path << std::endl;
    }
	// seek函数会把标记移动到输入流的结尾
    fin.seekg(0, fin.end);
    // tell会告知整个输入流(从开头到标记)的字节数量
    int length = fin.tellg();
   	// 再把标记移动到流的开始位置
    fin.seekg(0, fin.beg);
    std::cout << "file length: " << length << std::endl;
    
    // load buffer
    char* buffer = new char [length];
    // read函数读取(拷贝)流中的length各字节到buffer
    fin.read(buffer, length);

    // construct opencv mat and show image
    cv::Mat image(cv::Size(1280, 800), CV_8UC1, buffer);
    cv::imshow("test", image);
    cv::waitKey();

你可能感兴趣的:(c/c++,opencv)