1. 程式人生 > >Opencv學習筆記(1)_MAT影象與HBITMAP互相轉換

Opencv學習筆記(1)_MAT影象與HBITMAP互相轉換

mfc下hbitmap與mat的轉換

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