C++ fstream读取bmp图像

来源:互联网 发布:淘宝怎么买蜂蜜 编辑:程序博客网 时间:2024/05/03 15:52

以前都是使C语言中File* 、fopen、fread等操作文件,这几天学习了C++ IO标准库,就应用来读取bmp图像。

#include "stdafx.h"#include <fstream># include <windows.h>#include <opencv2/opencv.hpp>using namespace std;using namespace cv;int _tmain(int argc, _TCHAR* argv[]){BITMAPFILEHEADER fh;BITMAPINFOHEADER ih;int rows, cols;Mat showImg;ifstream src("2.bmp", ifstream::binary); //2.bmp为灰度图像if (!src){cerr << "打开失败";return -1;}src.read((char *)&fh, sizeof(BITMAPFILEHEADER));if (fh.bfType != 'MB'){cerr << "这不是BMP图像";return -1;}src.read((char *)&ih, sizeof(BITMAPINFOHEADER));rows = ih.biHeight;cols = ih.biWidth;//bmp图像数据存储是4字节对齐的int colsDQ = (cols + 3) / 4 * 4;//移动到图像数据处src.seekg(sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD) * 256, ios::beg);//参数:相对位置,起点showImg = Mat::zeros(rows, cols, CV_8U);//读取图像数据uchar *pData = new uchar[rows*colsDQ];src.read((char *)pData, rows*colsDQ);//bmp图像数据转换到Mat图像数据(Mat图像数据非对齐)for (int i = rows - 1; i >= 0; --i) //bmp图像存储为行倒序for (int j = 0; j < cols; ++j){showImg.ptr<uchar>(rows - 1 - i)[j] = *(pData + i*colsDQ + j);}delete[]pData;imshow("hi", showImg);waitKey();return 0;}

参考:

1、点击打开链接

2、点击打开链接 写bmp图像

0 0
原创粉丝点击