#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;
}
bmp文件读取
最新推荐文章于 2024-03-22 21:42:01 发布