VS2012中MFC使用Picture Control显示OpenCV处理的图像

VS2012MFC中使用Picture Control控件显示OpenCV2.4.4版本中的cv::Mat类型的图片。

在高版本的OpenCV中没有CvvImage类,我们可以自己添加,下载CvvImage.hCvvImage.cpp文件拷贝到工程目录下,通过向工程中添加“现有项”把这两个文件添加工程。

我们需要用到CvvImage中的两个函数CopyOfDrawToHDCCopyOf的参数必须是IplImage类型的,因此我们需要先把cv::Mat类型的图片转换为IplImage类型的。

假设:

cv::Mat类型变量为  matImg;

IplImage类型变量为 ipImg;

CvvImage类型变量为:cvvImg ;

cv::MatIplImage转换过程为:

ipImg = IplImage(matImg);

IplImageCvvImage

cvvImg.CopyOf(&ipImg) ;

把图片放到Picture Control控件中

CDC * pDC = GetDlgItem(IDC_PICTURE)->GetDC() ;

 

HDC hDC = pDC->GetSafeHdc() ;

myImage.DrawToHDC(hDC , &rect) ;

 

ReleaseDC(pDC) ;

补充:

IplImagecv::Mat的转换:

cv ::Mat  matImg(&ipImg , 0 );

 

Picture Control控件中装载图片:

CImage image ;

image.Load(m_imagePath) ;//m_imagePath为图片路径

CRect rect ;

m_pictureCtl.GetClientRect(&rect) ;//获取图片控件客户区

 

CDC * pDC = m_pictureCtl.GetWindowDC() ;

image.Draw(pDC->m_hDC , rect) ;

ReleaseDC(pDC) ;

 

从打开颜色对话框中获取选中的颜色值:

COLORREF color = colorDlg.m_cc.rgbResult ;//colorDlg为打开的颜色对话框

m_colorArray[0] = GetRValue(color) ;

m_colorArray[1] = GetGValue(color) ;

m_colorArray[2] = GetBValue(color) ;

 

 

添加Vertical Scroll Bar后相应在类向导中添加WM_SCROLL消息响应:

响应函数

void CColorDetector_4Dlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

switch (nSBCode)

{

case SB_THUMBPOSITION:

m_scrollBar.SetScrollPos(nPos) ;

default:

break;

}

CDialogEx::OnVScroll(nSBCode, nPos, pScrollBar);

}

 

转换颜色空间的方法:

cv::cvtColor(image, converted, CV_BGR2Lab);//第三个参数是目的颜色空间

你可能感兴趣的:(MFC,OpenCV)