MAT图像与HBITMAP互相转换

Home / C++ @百晓生 2018-1-18 6660

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python, Java and MATLAB/OCTAVE (版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#,Ch, Ruby的支持。

所有新的开发和算法都是用C++接口。一个使用CUDA的GPU接口也于2010年9月开始实现。

BOOL ChdrtestDlg: :HBitmapToMat(HBITMAP & _hBmp, Mat & _mat) {
    BITMAP bmp;
    GetObject(_hBmp, sizeof(BITMAP), &bmp);
    int nChannels = bmp.bmBitsPixel == 1 ? 1 : bmp.bmBitsPixel / 8;
    int depth = bmp.bmBitsPixel == 1 ? IPL_DEPTH_1U: IPL_DEPTH_8U;
    Mat v_mat;
    v_mat.create(cvSize(bmp.bmWidth, bmp.bmHeight), CV_MAKETYPE(CV_8U, nChannels));
    GetBitmapBits(_hBmp, bmp.bmHeight * bmp.bmWidth * nChannels, v_mat.data);
    _mat = v_mat;
    return TRUE;
}
BOOL ChdrtestDlg: :MatToHBitmap(HBITMAP & _hBmp, Mat & _mat) {
    //MAT类的TYPE=(nChannels-1+ CV_8U)<<3
    int nChannels = (_mat.type() >> 3) - CV_8U + 1;
    int iSize = _mat.cols * _mat.rows * nChannels;
    _hBmp = CreateBitmap(_mat.cols, _mat.rows, 1, nChannels * 8, _mat.data);
    return TRUE;
}
//注意此处CV_8U须使用实际的通道深度,本例因可以确定故写为CV_8U


本文链接:https://www.it72.com/12309.htm

推荐阅读
最新回复 (0)
返回