MFC中使用openCV显示、处理图像
(2012-03-15 20:37:57)
标签:
杂谈 |
在MFC界面中添加一个按钮用来打开文件窗口选择载入的图片(这比较简单,就不细说了);读取图片当然用的是opencv的接口了。
// load image
void CpicUIDlg::OnBnClickedLoadimage()
{
string tstring;
CString tFileName;
CFileDialog tDlg(TRUE);
if(tDlg.DoModal() == IDOK)
{
tFileName =
tDlg.GetPathName();
tstring =
tFileName.GetBuffer(0);
}
mat = cv::imread(tstring,
1);
if(! mat.data) {
MessageBox("error", "no image loaded!",
MB_OK);
return;
}
CDC* pDC =
GetDlgItem(IDC_RENDER)->GetDC();
HDC hDC =
pDC->GetSafeHdc();
IplImage img = mat;
CvvImage cimg;
cimg.CopyOf( &img
);
CRect rect;
GetDlgItem(IDC_RENDER)->GetClientRect(&rect);
cimg.DrawToHDC(hDC,
&rect);
ReleaseDC( pDC );
}
// load image
void CpicUIDlg::OnBnClickedLoadimage()
{
string tstring;
CString tFileName;
CFileDialog tDlg(TRUE);
if(tDlg.DoModal() == IDOK)
{
tFileName =
tDlg.GetPathName();
tstring =
tFileName.GetBuffer(0);
}
mat = cv::imread(tstring,
1);
if(! mat.data) {
MessageBox("error", "no image loaded!",
MB_OK);
return;
}
CRect rect;
GetDlgItem(IDC_RENDER)->GetClientRect(&rect);
float widRat = (float)rect.Width() /
mat.cols;
float heiRat = (float)rect.Height() /
mat.rows;
float resRat = widRat <
heiRat ? widRat : heiRat;
int resWid = mat.cols *
resRat;
int resHei = mat.rows *
resRat;
cv::resize(mat, mat2, cv::Size(resWid,
resHei)); // 调整
renderScene();
}
void CpicUIDlg::renderScene()
{
CDC* pDC =
GetDlgItem(IDC_RENDER)->GetDC();
HDC hDC =
pDC->GetSafeHdc();
IplImage img = mat2;
CvvImage cimg;
cimg.CopyOf( &img
);
CRect rect;
GetDlgItem(IDC_RENDER)->GetClientRect(&rect);
int tlx = rect.TopLeft().x;
int tly = rect.TopLeft().y;
int brx = tlx + mat2.cols -
1;
int bry = tly + mat2.rows -
1;
CRect drawRect;
drawRect.SetRect(tlx, tly, brx,
bry);
cimg.DrawToHDC(hDC,
&drawRect);
ReleaseDC( pDC );
}
前一篇:openCV,一些问题
后一篇:matlab,一些问题