bmp文件读取

#include <iostream>
#include <opencv2/opencv.hpp>  //头文件
#include <opencv2/xfeatures2d.hpp>
#include<fstream>
using namespace cv;  //包含cv命名空间
using namespace std;
/* 定义WORD为两个字节的类型 */
typedef unsigned short WORD;
/* 定义DWORD为四个字节的类型 */
typedef unsigned long DWORD;
class  BMPFILEHEADER
{
public:
	WORD bType;      // 文件标识符 
	DWORD bSize;     // 文件的大小 
	WORD bReserved1; // 保留值,必须设置为0  
	WORD bReserved2; // 保留值,必须设置为0 
	DWORD bOffset;   // 文件头的最后到图像数据位开始的偏移量 
};  // 14 字节

/* 位图信息头 */
class BMPINF
{
public:
	DWORD bInfoSize;            // 信息头的大小   
	DWORD bWidth;               // 图像的宽度     
	DWORD bHeight;              // 图像的高度     
	WORD bPlanes;               // 图像的位面数   
	WORD bBitCount;             // 每个像素的位数 
	DWORD bCompression;         // 压缩类型 
	DWORD bmpImageSize;         // 图像的大小,以字节为单位 
	DWORD bXPelsPerMeter;       // 水平分辨率 
	DWORD bYPelsPerMeter;       // 垂直分辨率 
	DWORD bClrUsed;             // 使用的色彩数 
	DWORD bClrImportant;        // 重要的颜色数 
};          // 40 字节

/* 彩色表:调色板 */
class RGBQUAD
{
public:
	WORD rgbBlue;     // 蓝色强度 
	WORD rgbGreen;    // 绿色强度 
	WORD rgbRed;      // 红色强度 
	WORD rgbReversed; // 保留值 
};
int main()
{
	/*VideoCapture capture("2.avi");
	if (!capture.isOpened())
	{
		std::cout << "video not open." << std::endl;
		return 1;
	}
	//Create SIFT class pointer
	Ptr<Feature2D> f2d = xfeatures2d::SIFT::create(50);
	//读入图片
	Mat img_1 = imread("3.jpg");
	Mat img_2;// = imread("3.jpg");
	vector<KeyPoint> keypoints_1, keypoints_2;
	f2d->detect(img_1, keypoints_1);
	Mat descriptors_1, descriptors_2;
	f2d->compute(img_1, keypoints_1, descriptors_1);
	BFMatcher matcher;
	vector<DMatch> matches;
	Mat img_matches;
	//Detect the keypoints
	while (true)
	{
		if (!capture.read(img_2))
		{
			std::cout << "no video frame" << std::endl;
			break;
		}
		capture >> img_2;
		f2d->detect(img_2, keypoints_2);
		//Calculate descriptors (feature vectors)
		f2d->compute(img_2, keypoints_2, descriptors_2);
		//Matching descriptor vector using BFMatcher
		matcher.match(descriptors_1, descriptors_2, matches);
		//绘制匹配出的关键点
		drawMatches(img_1, keypoints_1, img_2, keypoints_2, matches, img_matches);
		imshow("【match图】", img_matches);
		if (waitKey(1)>0)
			 break;
	}
	capture.release();
	Mat a = imread("3.bmp");
	Mat b = imread("4.bmp");
	imwrite("33.bmp",a);
	imwrite("44.bmp", b);
	Mat a = imread("img17.jpg");
	Mat a1;
	Canny(a, a1,50,150,3);
	imshow("a1", a1);
	int b;
	b= a.at<Vec3b>(0,0)[0];
	int c;
	c= a.at<Vec3b>(0,0)[1];
	int d;
	d= a.at<Vec3b>(0,0)[2];
	for (int i = 0; i < a.rows; i++)
	{
		for (int j = 0; j < a.cols; j++)
		{
			if (a.at<Vec3b>(i, j)[2] == 255 && a.at<Vec3b>(i, j)[1] == 255 && a.at<Vec3b>(i, j)[0] == 255)
			{
				a.at<Vec3b>(i, j)[0] = b;
				a.at<Vec3b>(i, j)[1] = c;
				a.at<Vec3b>(i, j)[2] = d;
				//cout << "1";
			}

		}
	}
	imshow("a", a);
	imwrite("a.jpg", a);
	waitKey(0);
	return 0;
	//等待任意按键按下*/
	ifstream files("3.bmp",ios::binary);
	BMPFILEHEADER bmpFileHeader;
	BMPINF bmpInfo;               
    files.seekg(0, files.end);
	int length = files.tellg();
	files.seekg(0, files.beg);
	char*buffer;
	files.read((char*)bmpFileHeader, sizeof(BMPFILEHEADER));
	for (int i = 0; i < length; i++)
		cout << buffer[i] << endl;
	delete[] buffer;
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值