MFC中多线程显示相机捕获图片

原创 2015年11月18日 18:20:32
  • 值得注意的是图像控件ID不可以出现在线程函数中,所以在主类里再单独定义一个函数用于显示图像,然后在线程函数中调用它。
  • 一、首先在主类中声明图像显示函数
    void DrawPicToHDC(IplImage *img, UINT ID);
    PGRGuid guid;
    BusManager busMgr;
    Error error = busMgr.GetCameraFromIndex(0, &guid);
    Camera cam;
    IplImage *image = NULL;
    Image rawImage;
    Image convertedImage;
    void show_check();
    CStatic m_pic;
  • 在主类外部声明函数UINT ThreadFunc(LPVOID lpParam):
UINT ThreadFunc(LPVOID lpParam);
  • 二、在cpp文件本里声明运行控制变量m_bRun和定义show_check()函数:
volatile BOOL m_bRun;
void CtestDlg::show_check()
{
        Error error = cam.Connect(&guid);

        if (error != PGRERROR_OK)
        {
            AfxMessageBox(_T("相机连接失败!"));
        }
        while (m_bRun == TRUE)
        {

            // Start capturing images
            cam.StartCapture();
            cam.RetrieveBuffer(&rawImage);

            // Create a converted image
        rawImage.Convert(PIXEL_FORMAT_MONO8, &convertedImage);
        pimage = cvCreateImage(cvSize(1024, 768), IPL_DEPTH_8U, 1);
            (pimage->imageData) = (char*)(convertedImage.GetData());
            DrawPicToHDC(pimage, IDC_PIC);
            cvReleaseImage(&pimage);
        }

}
  • 三、添加开始和结束按钮响应函数:
void CtestDlg::OnBnClickedStart()
{
    error = cam.Connect(&guid);
    if (error != PGRERROR_OK)
    {
        AfxMessageBox(_T("相机连接失败!"));
    }

    cam.StartCapture();
    m_bRun = TRUE;
    GetDlgItem(IDC_START)->EnableWindow(FALSE);
    GetDlgItem(IDC_STOP)->EnableWindow(TRUE);
    hThread = AfxBeginThread(ThreadFunc,
        this);//创建一个新线程ThreadFunc
}

void CtestDlg::OnBnClickedStop()
{
    cam.StopCapture();
    error = cam.Disconnect();
    if (error != PGRERROR_OK)
    {
        AfxMessageBox(_T("相机断开失败!"));
    }
    m_bRun = FALSE;
    GetDlgItem(IDC_START)->EnableWindow(TRUE);
    GetDlgItem(IDC_STOP)->EnableWindow(FALSE);
}
  • 四、定义线程函数:
UINT ThreadFunc(LPVOID lpParam)
{
    CtestDlg* pInfo = (CtestDlg*)lpParam;//固定格式
    pInfo->show_check();//调用图像显示函数
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

C++封装opencv读取视频与摄像头的库

GetImage.h#ifndef _GET_IMAGE_H_ #define _GET_IMAGE_H_#include "opencv2/highgui.hpp"using namespace c...
  • qq_39660930
  • qq_39660930
  • 2017年08月25日 17:48
  • 132

工业相机采集帧回调函数

相机帧回调函数的定义
  • peng864534630
  • peng864534630
  • 2017年04月07日 22:16
  • 873

探索Bitmap使用姿势

转载请注明出处:https://lizhaoxuan.github.io 前言 早些时候对Android下GC调用时机比较好奇,所以写了一些case测试各种情况下Android GC调用时机与...
  • u010255127
  • u010255127
  • 2018年01月28日 00:16
  • 47

利用opencv进行usb相机的视频捕获

USB相机便宜,使用起来方便,而opencv也包含了读取USB相机视频数据的API函数。在windows xp中,该API函数是利用windows的VFW模块来实现的。下面,我给出 相应的参考代码:...
  • carson2005
  • carson2005
  • 2011年08月20日 22:22
  • 6385

利用opencv进行usb相机的视频捕获

USB相机便宜,使用起来方便,而opencv也包含了读取USB相机视频数据的API函数。在windows xp中,该API函数是利用windows的VFW模块来实现的。下面,我给出相应的参考代码:#i...
  • Augusdi
  • Augusdi
  • 2013年04月30日 09:47
  • 1731

MFC多线程进行图片的显示

在MFC编程中开始学习都是只利用一个主线程,比较蛋疼的是,当你只用一个主线程进行如播放,查询时,MFC的界面会卡死,你无法进行其他的操作,这时需要进行多线程的编程,在操作时生成一个子线程来进行一些如播...
  • qq_25819827
  • qq_25819827
  • 2017年03月23日 00:30
  • 949

大华相机MFC抓取图片显示

  • 2017年08月01日 10:51
  • 41.79MB
  • 下载

MFC中显示图片

1、通过点击界面浏览按钮选择BMP图像文件。 点击浏览按钮打开文件对话框选择BMP图像文件,得到文件所在的路径目录。关键代码如下: void ShowBMPDlg::OnButtonSelecti...
  • u013360881
  • u013360881
  • 2017年03月31日 20:03
  • 976

多线程MFC处理视频

由于之前在做ALLIED TECNOLOGY工业相机,在工业相机获取视频的基础上,将工业相机存储的pBuffer数据(包含了一幅图像的所有像素点数据,数据存储规律为B0G0R0,B1G1R1……先行后...
  • naoxudian6278
  • naoxudian6278
  • 2017年10月13日 10:36
  • 224

MFC调用HALCON实现相机采图和图像显示

一、相机采图 二、图像显示 1、抓取单帧图像 m_Camera.SingleGrab(GetImage()); 2、显示图片 CHalconBase::uShowImageOrSize(GetMy...
  • surui_555
  • surui_555
  • 2015年04月03日 17:24
  • 3609
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC中多线程显示相机捕获图片
举报原因:
原因补充:

(最多只允许输入30个字)