OpenCV读取图片在MFC中显示的问题
2013-01-16 11:28
716 查看
昨天做一个小的MFC+OPENCV图像处理程序界面如下:
其中在效果演示一栏里加了一个Frame用以显示图像。但是遇到一个问题,如何将IplImage*类型的图像转换为可以再MFC中显示的图像。
各种百度google以后终于找到一解。
由于IplImage存储数据的方式与MFC支持的Bitmap类似,只需要利用opencv自带的类型CvvImage就可以了。
完成的函数如下:
当然,mypicrect是提前定义好的,希望图片显示正常的矩形。因为这个Frame不一定是合适的大小,而图片DrawToHDC的时候会存在缩放以适应Frame的问题,所以在读入图片时候就将这个矩形进行校正,保证贴图的比例与原图片一致。
读入图片函数如下:
这样就可以将图片读入并正确显示了。
其中在效果演示一栏里加了一个Frame用以显示图像。但是遇到一个问题,如何将IplImage*类型的图像转换为可以再MFC中显示的图像。
各种百度google以后终于找到一解。
由于IplImage存储数据的方式与MFC支持的Bitmap类似,只需要利用opencv自带的类型CvvImage就可以了。
完成的函数如下:
void CMyDlg::ShowPic(IplImage *img) { CDC* pDC=GetDlgItem(IDW_IMAGEWINDOW)->GetDC(); HDC hDC=pDC->GetSafeHdc(); CvvImage dcimg; dcimg.CopyOf(img,1); dcimg.DrawToHDC(hDC,&mypicrect); }
当然,mypicrect是提前定义好的,希望图片显示正常的矩形。因为这个Frame不一定是合适的大小,而图片DrawToHDC的时候会存在缩放以适应Frame的问题,所以在读入图片时候就将这个矩形进行校正,保证贴图的比例与原图片一致。
读入图片函数如下:
void CMyDlg::OnOpen() { CFileDialog dialog(true,NULL,NULL,0,"图片文件|*.*"); dialog.m_ofn.lpstrTitle="打开图片文件"; if (dialog.DoModal()!=IDOK) { return; } oriimg=cvLoadImage(dialog.GetPathName(),-1); transimg=cvLoadImage(dialog.GetPathName(),0); GetDlgItem(IDW_IMAGEWINDOW)->GetClientRect(&mypicrect); if (oriimg->width>mypicrect.Width() ) { if (oriimg->height<=mypicrect.Height()) { mypicrect.bottom=mypicrect.top+mypicrect.Height()*mypicrect.Width()/oriimg->width; } else { if (oriimg->height/mypicrect.Height()>oriimg->width/mypicrect.Width()) { mypicrect.right=mypicrect.left+mypicrect.Width()*mypicrect.Height()/oriimg->height; } else { mypicrect.bottom=mypicrect.top+mypicrect.Height()*mypicrect.Width()/oriimg->width; } } } else { if (oriimg->height>mypicrect.Height()) { mypicrect.right=mypicrect.left+mypicrect.Width()*mypicrect.Height()/oriimg->height; } else { mypicrect.right=mypicrect.left+oriimg->width; mypicrect.bottom=mypicrect.top+oriimg->height; } } ShowPic(oriimg); }
这样就可以将图片读入并正确显示了。
相关文章推荐
- 知乎上有一个问题“在mfc框架中,有上面方法能直接将opencv2.0库中的Mat格式图片传递到Picture Control”中显示?
- OpenCV【2】---读取png图片显示到QT label上的问题
- OpenCV在MFC框架下显示图片问题
- MFC 通过opencv 读取并显示图片
- vs2015+opencv3.2+mfc读取摄像头显示在图片控件Picture Control
- 【OpenCV学习笔记】【函数学习】一(MFC+OpenCV2.4.7读取摄像头之cvCaptureFromCAM()的索引问题
- 在 MFC 框架中,有什么方法能直接将 OpenCV 2.0 库中 Mat 格式的图片传递到 Picture Control(图片控件)显示?
- 64位vs2010的opencv配置和图片读取问题
- VC 6.0 MFC 读取并显示图片和彩色转灰度
- OpenCV入门二:OpenCV读取一张图片显示,并将其重写为灰度图
- OpenCV例子一:读取显示图片
- mfc控件中显示opencv图片
- opencv图片读取问题
- Opencv (Opencv2)结合MFC学习数字图像处理【3】---显示图片
- Opencv 基于MFC 显示图片 更改图片分辨率 保存图片 入门操作实例
- MFC显示Mat数据格式(Opencv)图片,保证4字节对齐,图片缩放不错行
- OpenCV-Python learning-1.安装,图片读取显示
- OpenCV(Emgu)入门系列(8):在C#的PictureBox显示由EmguCV读取的图片
- OpenCV基础篇之读取显示图片
- 转换排列Qt中使用OpenCV显示图片时,Mat结构转换为QImage结构的问题