好多opencv的应用程序界面中在MFC中显示图像,但是我发现这些显示功能大部分用到了一个叫CvvImage的类,最近使用opencv2.3.1,发现找不到这个类了。
没有具体研究过opencv ,但是opencv在MFC中显示图像需要用的一个叫做CvvImage的类的DrawToHDC()的函数,但是我在2.3.1下却怎么也没有找到这个类,和这个函数。在2.3.1的文档下没有关于这个的任何资料,不知道是不是新版本的opencv去掉了这个类,或者用其他的方式实现了。所以我需要用以前的方式实现这个类。在网上找了一些资料。发现这个问题可以这样处理。
我们可以自己建立一个CvvImage.h和一个CvvImage.cpp的文件,添加到工程中。这样我们在工程中包含上这个CvvImage.h的头文件,就可以正常的按照以前的方式使用CvvImage类将图像绘制到MFC控件中了。
一下给出这两个文件的源码。
CvvImage.h
#pragma once
#ifndef CVVIMAGE_CLASS_DEF
#define CVVIMAGE_CLASS_DEF
#include "opencv.hpp"
/* CvvImage class definition */
class CvvImage
{
public:
CvvImage();
virtual ~CvvImage();
/* Create image (BGR or grayscale) */
virtual bool Create( int width, int height, int bits_per_pixel, int image_origin = 0 );
/* Load image from specified file */
virtual bool Load( const char* filename, int desired_color = 1 );
/* Load rectangle from the file */
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
/* Save entire image to specified file. */
virtual bool Save( const char* filename );
/* Get copy of input image ROI */
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);
/* width and height of ROI */
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;