MFC中使用Picture控件显示摄像头1.0

本文介绍如何在MFC应用中利用Picture控件显示摄像头视频流。由于MFC Picture控件不支持直接显示OpenCV的Mat格式图像,因此需要将Mat转换为IplImage,再转为CvvImage。作者提供了转换函数和设置定时器的方法来实现实时显示,并展示了打开、关闭摄像头以及处理结果展示的代码片段。
摘要由CSDN通过智能技术生成

最近需要做一个界面,想着一边显示摄像头所采集的视频,当按下按钮后,另一边显示处理结果,在网上找了些资料,主要参考了这篇:http://www.cnblogs.com/leven20061001/archive/2012/10/17/2727865.html。 

由于MFC中Picture控件不能直接显示Opencv的Mat格式的图像,所以需要对Mat图像进行转换,即首先将图片转到IplImage格式,再将图片转到CvvImage格式,然后将其显示到Picture控件上(参考了http://blog.csdn.net/duhuzhen/article/details/53133927)。但是由于新版本中没有CvvImage,所以需要在项目中添加相关头文件和源文件,其代码如下:

CvvImage.h

#pragma once

#ifndef CVVIMAGE_CLASS_DEF

#define CVVIMAGE_CLASS_DEF

#include "opencv.hpp"

class  CvvImage

{

public:

  CvvImage();

  virtual ~CvvImage();

 

  virtual bool  Create( int width, int height, int bits_per_pixel, int image_origin = 0 );

 

  virtual bool  Load( const char* filename, int desired_color = 1 );

 

  virtual bool  LoadRect( const char* filename,

    int desired_color, CvRect r );

#if defined WIN32 || defined _WIN32

  virtual bool  LoadRect( const char* filename,

    int desired_color, RECT r )

  {

    return LoadRect( filename, desired_color,

        cvRect( r.left, r.top, r.right - r.left, r.bottom - r.top ));

  }

#endif

 

  virtual bool  Save( const char* filename );

 

  virtual void  CopyOf( CvvImage& image, int desired_color = -1 );

  virtual void  CopyOf( IplImage* img, int desired_color = -1 );

  IplImage* GetImage() { return m_img; };

  virtual void  Destroy(void);

 

  int Width() { return !m_img ? 0 : !m_img->roi ? m_img->width : m_img->roi->width; };

  int Height() { return !m_img ? 0 : !m_img->roi ? m_img->height : m_img->roi->height;};

  int Bpp() { return m_img ? (m_img->depth & 255)*m_img->nChannels : 0; };

  virtual void  Fill( int color );

 

  virtual void  Show( const char* window );



#if defined WIN32 || defined _WIN32

 

  virtual void  Show( HDC dc, int x, int y, int width, int height,

    int from_x = 0, int from_y = 0 );

 

  virtual void  DrawToHDC( HDC hDCDst, RECT* pDstRect );

#endif

protected:

  IplImage*  m_img;

};

typedef CvvImage CImage;

#endif



CvvImage.cpp

#include "StdAfx.h"
#include "CvvImage.h"
//
// Construction/Destruction
//
CV_INLINE RECT NormalizeRect( RECT r );
CV_INLINE RECT NormalizeRect( RECT r )
{
  int t;
  if( r.left > r.right )
  {
    t = r.left;
    r.left = r.right;
    r.right = t;
  }
  if( r.top > r.bottom )
  {
    t = r.top;
    r.top = r.bottom;
    r.bottom = t;
  }

  return r;
}
CV_INLINE Cv
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值