在MFC图片控件中打开摄像头实时拍照

1.功能简介
用大恒相机实时拍摄电池照片,然后根据模板对样品进行检测,然后根据模板进行匹配,结果匹配成功的进行画圈。
2.安装大恒相机的驱动,保证用自带软件可以打开相机
3.打开halcon12,打开相机采集助手,然后识别设备,点击实时,看能否打开相机进行实时拍照,如果可以的话说明在MFC对话框中就可以实现打开相机。
4.点击生成代码将打开相机的代码转成C++,复制代码到MFC中,但是导出代码后在我的MFC对话框上无法显示相机图像,一直报错。后来搞了好久才在网上找到答案:在halcon安装目录下找到关于我所用大恒相机的那个DLL文件拷贝到MFC工程目录下,问题解决。
5.相机打开后只能拍一张,while循环有问题,发现无法实时拍照,所以决定重载一个消息ON_WM_TIME,设置一个定时器调用ontimer函数。
6.如果要保证实时检测和手动检测可以随时地切换的话,那么在图片控件的窗口句柄那里就要建立一个公共的变量,方便随时转换。oninitdialog函数代码:

CRect rtWindow;
    HWND hImgWnd = GetDlgItem(IDC_PIC1)->m_hWnd;
    GetDlgItem(IDC_PIC1)->GetClientRect(&rtWindow);
    SetWindowAttr("background_color", "white");
    OpenWindow(rtWindow.left, rtWindow.top, rtWindow.Width(), rtWindow.Height(), (Hlong)hImgWnd, "visible", "", &hv_WindowHandle);
    SetColor(hv_WindowHandle, "red");
    SetLineWidth(hv_WindowHandle, 3);

7.显示的图片假如格式是PNG的话,那么显示出来是黑白的效果,所以需要改成bmp或者jpg的格式。
8.实时显示的样品检测假如匹配成功后需要画圆,圆的半径可以从模板上获取,代码如下:

void CWSBCRDlg::OnTimer(UINT_PTR nIDEvent)

if (hv_Score > 0.1)
        {
            HTuple  hv_Row, hv_Column, hv_Radius, hv_StartPhi;
            HTuple  hv_EndPhi, hv_PointOrder;

            GenContourRegionXld(ho_model, &ho_Contours, "border");
            FitCircleContourXld(ho_Contours, "ahuber", -1, 0, 0, 3, 2, &hv_Row, &hv_Column,
                &hv_Radius, &hv_StartPhi, &hv_EndPhi, &hv_PointOrder);
            GenCircle(&ho_ImageSearch1, hv_RowCheck, hv_ColumnCheck, hv_Radius);
            GenContourRegionXld(ho_ImageSearch1, &ho_Contours, "border");
            DispObj(ho_Contours, hv_WindowHandle);
        }

9.创建模板

void CWSBCRDlg::OnBnClickedButton7()
{
    // TODO:  在此添加控件通知处理程序代码
    KillTimer(1);
    DrawCircle(hv_WindowHandle, &hv_Row, &hv_Column, &hv_Radius);
    GenCircle(&ho_circleout, hv_Row, hv_Column, hv_Radius);

    ReduceDomain(ho_Image, ho_circleout, &ho_ImageReduced);
    WriteImage(ho_ImageReduced, "png", 0, "C:/Users/Administrator/Desktop/电池字符识别分类/02图片/有无检测/1.png");
    MessageBox("
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值