
首先在自己的项目中添加CvvImage.h和CvvImage.cpp。在要使用的类中包含其头文件#include "CvvImage",接着添加如下消息处理函数:
void CPersonWidthDlg::showimg(void)
{
Mat img = imread(".\\lena.jpg")
IplImage iplImg = IplImage(img)
//Iplimage * iplImg = &img.operator IplImage()
CDC* pDC = GetDlgItem(IDC_FRAME)->GetDC()
HDC hdc = pDC->GetSafeHdc()
RECT rect
GetDlgItem(IDC_FRAME)->GetClientRect(&rect)
CvvImage cvvImg
cvvImg.CopyOf(&iplImg)
cvvImg.DrawToHDC(hdc,&rect)
ReleaseDC(pDC)
}
MFC 微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。
其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
HG_IS_IMAGE 是个宏定义#define HG_IS_IMAGE(img) \
((img) != 0 &&((const IplImage*)(img))->nSize == sizeof(IplImage) &&\
((IplImage*)img)->imageData != 0)
你定义的图像是4通道图像 cvCreateImage(m_size,IPL_DEPTH_32F,4)
cimg.Copyof(m_DstImg,3)最后一个参数是通道数,你把他改成m_DstImg->nChannels
然后试试
好在我自己在网上找到了,希望对大家有帮助。CvvImage类以及在MFC中显示IplImage图像的方法(2010-01-07 10:53:41) 转载标签: colormfcfrom通道杂谈
平常使用Open CV时总是跳出一个个窗口,很难将项目进行系统集成,特别是在MFC等Windows环境中加载显示Open CV中的IplImage图像;
使用Open CVhighgui.h 中定义的CvvImage类,可以很好的实现Open CV和Windows MFC显示接口;先介绍一下CvvImage类:
由于CvvImage是在 highgui.h 头文件中声明的,因此如果您的程序中需要使用,则必须在开头包含此头文件
#include <highgui.h>
CvvImage对应CImage宏:
#define CImage CvvImage
注意事项:
由于CImage太常见, 很容易造成冲突, 因此建议不要使用该宏(可以直接删去此宏定义)。
警告:参数中含有HDC(注:一种windows系统下定义的变量类型,用来描述设备描述表的句柄类型)类型的并不能保证移植到其他平台,例如Show/DrawToHDC等。
后文中的DC,即device context(设备环境),一般可以理解为windows *** 作系统为方便绘图而抽象的”绘图表面“,“往窗口上绘图”,有时也被说成是“往窗口DC上绘图”。
CvvImage::Create
bool CvvImage::Create(int w, int h, int bpp, int origin)
创建一个图像。 成功返回true, 失败返回false。
w 图像宽
h 图像高
bpp 每个像素的bit数, 值等于像素深度乘以通道数
origin 0 - 顶—左结构, 1 - 底—左结构 (Windows bitmaps 风格)
例:// 创建一个400行600列的, IPL_DEPTH_8U类型的3通道图像, 顶—左结构
CvvImage img
bool flag = img.Create(600, 400, IPL_DEPTH_8U*3, 0)
if(!flag) printf("创建图像失败!")
CvvImage::CopyOf
void CvvImage::CopyOf(CvvImage&img, int desired_color)
void CvvImage::CopyOf(IplImage* img, int desired_color)
从img复制图像到当前的对象中。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)