VS2012中MFC中使用Picture Control控件显示OpenCV2.4.4版本中的cv::Mat类型的图片。
在高版本的OpenCV中没有CvvImage类,我们可以自己添加,下载CvvImage.h和CvvImage.cpp文件拷贝到工程目录下,通过向工程中添加“现有项”把这两个文件添加工程。
我们需要用到CvvImage中的两个函数CopyOf和DrawToHDC,CopyOf的参数必须是IplImage类型的,因此我们需要先把cv::Mat类型的图片转换为IplImage类型的。
假设:
cv::Mat类型变量为 matImg;
IplImage类型变量为 ipImg;
CvvImage类型变量为:cvvImg ;
cv::Mat到IplImage转换过程为:
ipImg = IplImage(matImg);
IplImage到CvvImage:
cvvImg.CopyOf(&ipImg) ;
把图片放到Picture Control控件中
CDC * pDC = GetDlgItem(IDC_PICTURE)->GetDC() ;
HDC hDC = pDC->GetSafeHdc() ;
myImage.DrawToHDC(hDC , &rect) ;
ReleaseDC(pDC) ;
补充:
从IplImage到cv::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);//第三个参数是目的颜色空间