opencv 拍摄照片

来源:互联网 发布:数据库在线学习网站 编辑:程序博客网 时间:2024/04/27 15:43

opencv 拍摄照片

flyfish

环境 MFC opencv版本3

使用了 老版本的文件的CvvImage.h,CvvImage.cpp添加到现有项目
主要将视频显示到MFC的Picture Control中

头文件

    bool m_bIsStop;//关闭摄像头    afx_msg void OnClose(); //窗口关闭 关闭摄像头    bool m_bIsTakePicture;//是否拍照    void DoEvent();//防止无响应       void showImage(cv::Mat& src, UINT ID);

实现文件
初始
标志变量m_bIsStop,m_bIsTakePicture初始化都为false

void CDlgX::showImage(cv::Mat& src, UINT ID)//显示视频帧{    if (m_bIsStop)    {        return;    }        if (src.empty())            return;        CRect rect;        cv::Mat dst = src.clone();        GetDlgItem(ID)->GetClientRect(&rect);           if (dst.channels() == 1)            cv::cvtColor(dst, dst, CV_GRAY2BGR);        CDC* pDC = GetDlgItem(ID)->GetDC();        HDC hDC = pDC->GetSafeHdc();                        CvvImage cimg;        IplImage cpy = dst;        cimg.CopyOf(&cpy);                              cimg.DrawToHDC(hDC, &rect);                     ReleaseDC(pDC);}void CDlgX::OnBnClickedButtonTakeapicture()//拍照{    m_bIsTakePicture = true;    }void CDlgX::OnBnClickedButtonOpen()//打开摄像头{    // TODO:  在此添加控件通知处理程序代码    cv::VideoCapture capture;    capture.open(0);    if (!capture.isOpened())    {        return;    }    cv::Mat frame;    m_bIsStop = false;    while (true)    {        DoEvent();        if (m_bIsStop)        {            break;        }        capture >> frame;        if (m_bIsTakePicture)        {            cv::imwrite("D:\\temp\\1.jpg", frame);            Sleep(1000);            m_bIsTakePicture = false;        }        showImage(frame, IDC_STATIC_CAMERA);    }    capture.release();}void CDlgX::OnClose(){    // TODO:  在此添加消息处理程序代码和/或调用默认值    m_bIsStop = true;    CDialogEx::OnClose();}void CDlgX::DoEvent()//防止无响应{    MSG msg;    while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))    {        TranslateMessage(&msg);        DispatchMessage(&msg);    }}
0 0
原创粉丝点击