目录
MFC——窗口静态显示
利用Opencv库进行窗口显示
需要材料:CvvImage.h和CvvImage.cpp
步骤:第一步:头文件、第二步:声明、第三步:使用
/*
功能;画入指定IDC
第一步:头文件:在当前的类的的头文件代码区头包含:#include "CvvImage.h"
第二步:将函数在当前所在的类的头文件声明:void CMFC_CalibrationDlg::drawToDC(IplImage* image, UINT ID)
第三步:使用
IplImage img = src;
drawToDC(&img, 自己指定IDC窗口); //显示
*/
void C自己MFC的Dlg::drawToDC(IplImage* image, UINT ID)//画到指定ID(默认IDC_STATIC)在头文件声明函数
{
CDC* pDC = GetDlgItem(ID)->GetDC();
HDC pHdc = pDC->GetSafeHdc();
CRect rect;
GetDlgItem(ID)->GetClientRect(&rect);
CvvImage cimg;
cimg.CopyOf(image);
cimg.DrawToHDC(pHdc, rect);
ReleaseDC(pDC);
}
MFC——定时器:窗口动态显示
/*
// 窗口定时事件
窗口类向导——》消息——》WMTimer——》OnTimer双击——》编辑代码
使用:
SetTimer(1, 10, NULL);//开启定时器1
KillTimer(1); //关闭定时器防止缓存滞留
*/
void CdahengDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
switch (nIDEvent)
{
case 1://Timer(1)
{ //objImageDataPtr获取相机缓存
my_camera.objImageDataPtr = my_camera.ObjStreamPtr->GetImage(100);//超时时间使用500ms,用户可以自行设定
if (my_camera.objImageDataPtr->GetStatus() == GX_FRAME_STATUS_SUCCESS)
{
my_camera.ImageFlag = true; //图片采集成功
//假设原始数据是BayerRG8图像,则 GX_BIT_0_7
void* pRGB24Buffer = NULL;
pRGB24Buffer = my_camera.objImageDataPtr->ConvertToRGB24(GX_BIT_0_7, GX_RAW2RGB_NEIGHBOUR, true);
Mat test;
test.create(my_camera.objImageDataPtr->GetHeight(), my_camera.objImageDataPtr->GetWidth(), CV_8UC3);
memcpy(test.data, pRGB24Buffer, my_camera.objImageDataPtr->GetPayloadSize() * 3);
if (test.data){
IplImage image;
image = test;
drawToDC(&image, IDC_STATIC_SHOW);
}
}
else
{
KillTimer(1); //关闭定时器防止缓存滞留
if (MessageBox(_T("请连接相机"), _T("相机事件"), MB_YESNO | MB_ICONWARNING) == IDNO)
{
//关闭定时刷新
break;
}
}
break;
}
case 2://Timer(2)
{
// 用户程序
break;
}
}
CDialogEx::OnTimer(nIDEvent);
}
MFC——【X】退出菜单缓存清除
/*
//窗口关闭【X】的事件
窗口类向导——》消息——》WMClose双击——》OnClose程序块——》添加代码
使用:
直接在此程序块进行操作
*/
void CdahengDlg::OnClose()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
// 关闭相机
if (my_camera.DeviceFlag == true)
{
my_camera.DeviceFlag = false;
my_camera.ImageFlag = false;
my_camera.OpenFlag = true;//初始化重启
KillTimer(1); //关闭定时器防止缓存滞留
//发送停采命令
my_camera.ObjFeatureControlPtr->GetCommandFeature("AcquisitionStop")->Execute();
my_camera.ObjStreamPtr->StopGrab();
//释放资源
my_camera.ObjStreamPtr->Close();
my_camera.ObjDevicePtr->Close();
//反初始化库
MessageBox(_T("相机【确定】关闭"), _T("相机事件..."));
IGXFactory::GetInstance().Uninit();
}
CDialogEx::OnClose();
}
MFC——警告弹窗MessageBox
// 更多功能查找其他说明书
MessageBox(_T("相机【确定】关闭"), _T("相机事件..."));
MFC——相机单帧采集
/*利用按钮进行标志位,然后定时器里面进行赋值命令*/
// 图像处理
void CdahengDlg::OnBnClickedButtonPro()
{
// TODO: 在此添加控件通知处理程序代码
if (my_camera.OpenFlag == true)
{
MessageBox(_T("请打开相机"));
return;
}
if (my_camera.ImageFlag == true)
{
my_camera.ImageClo = true;//相片结束标志
}
}
// 采集命令
if (my_camera.ImageClo == true)//相片处理按钮标志
{
test.copyTo(my_camera.src);
if (my_camera.src.data)
{
IplImage image;
image = my_camera.src;
drawToDC(&image, IDC_STATIC_SHOWPRO);
my_camera.ImageClo = false;//相片结束标志
}
}