把opencv Mat 按位存成bmp二值图像 (1bit 1pixel)

来源:互联网 发布:店铺如何申请淘宝直播 编辑:程序博客网 时间:2024/06/05 15:50
1 

把opencv Mat 按位存成bmp二值图像 (1bit 1pixel)



1.用位操作把Mat存到一段类存中,注意每个像素占一个bit

2. 把Mat写成bmp格式的图像(包含 windows.h 头文件)



2 

BMP头文件格式以及C语言读取头文件(二)



如某BMP文件开头:
424D 4690 0000 0000 0000 4600 0000 2800 0000 8000 0000 9000 0000 0100*1000 0300 0000 0090 0000 A00F 0000 A00F 0000 0000 0000 0000 0000*00F8 0000 E007 0000 1F00 0000 0000 0000*02F1 84F1 04F1 84F1 84F1 06F2 84F1 06F2 04F2 86F2 06F2 86F2 86F2 .... .... 
BMP文件可分为四个部分:位图文件头、位图信息头、彩色板、图像数据阵列,在上图中已用*分隔。
一、图像文件头

RGB和RGBQUAD的区别 

COLORREF GetPixel(
  HDC hdc,    // handle to DC点击打开链接
  int nXPos,  // x-coordinate of pixel
  int nYPos   // y-coordinate of pixel
);




====================================================

OPENCV捕捉到的视频怎么转换成BMP格式的图片,并在picture控件中显示


你用的OpenCV转到的图像是Mat类型还是其他的?Mat的话可以转成CImage来显示在picture控件上:

int MatToCImage( Mat &mat, CImage &cImage){    //create new CImage    int width    = mat.cols;    int height   = mat.rows;    int channels = mat.channels();     cImage.Destroy(); //clear    cImage.Create(width, height,8*channels ); //默认图像像素单通道占用1个字节     //copy values    uchar* ps;    uchar* pimg = (uchar*)cImage.GetBits(); //A pointer to the bitmap buffer    int step = cImage.GetPitch();     for (int i = 0; i < height; ++i)    {        ps = (mat.ptr<uchar>(i));        for ( int j = 0; j < width; ++j )        {            if ( channels == 1 ) //gray            {                *(pimg + i*step + j) = ps[j];            }            else if ( channels == 3 ) //color            {                for (int k = 0 ; k < 3; ++k )                {                    *(pimg + i*step + j*3 + k ) = ps[j*3 + k];                }                       }        }       }     return 0;}




















原创粉丝点击