超详细手把手教你 VS2017 MFC + OpenCV3.X 打开、嵌入一张、多张图片

在使用MFC导入opencv3图片时,博主查找了许多博客,但是有的步骤实现起来麻烦,有的实现效果差,还有一些就是比较落后适用于opencv2.X版本。接下来我把自己查阅资料实现在VS2017MFC上添加打开opencv3.X图片的详细实现方法分享给大家,手把手带你实现MFC打开opencv图片。

1. 在MFC中配置好opencv3的环境
这步相信大家都已经配置好了,网上详细教程特别多,在此就不详细展开。简要来说:(打开MFC工程,添加opencv3.X的包含目录、库目录、添加依赖。。。)

2. 新建 MFC 对话框项目
基于对话框,默认设置或者在静态库中使用MFC都可,完成。

3. 添加和设置控件
(1)工具箱,打开工具箱 ⇒ 添加 Button 控件;
右击添加的按钮,属性,将其 Caption 改为 ”打开图片“;
(2)同理,添加Picture Control控件

打开Picture 控件属性窗口,其 ID 为 IDC_STATIC,修改Type 为 Rectangle,将 Picture 控件大小调整合适(用于最终图像的显示)
(3)右击按钮,添加事件处理程序

4. 添加 OpenCV 的 CvvImage 文件(.h, .cpp)
这些是我从github下载下来的,在opencv3.4.1亲测可用,下面是下载好的上传到我的资源了(没多大就是一个.cpp文件,一个.h文件),当然你也可以从github下载。
CvvImage.h 下载地址:https://download.csdn.net/download/weixin_42512266/11040964
CvvImage.cpp 下载地址:https://download.csdn.net/download/weixin_42512266/11040949
下载好,移动到自己所建工程的文件夹下,不然会无法打开源文件。

在VS中解决方案资源管理器中,
【头文件】(右键)⇒ 添加现有项 ⇒ CvvImage.h
添加头文件
【源文件】(右键)⇒ 添加现有项 ⇒ CvvImage.cpp
添加源文件
添加完成

5. 添加代码
1)打开 C**Dlg 类对应的头文件(**Dlg.h)的起始位置处添加:

#include <opencv\cv.h>

#include <opencv\highgui.h>

#include "CvvImage.h"

头文件
2)在(*Dlg.h)文件最后的 C**Dlg 类的声明中添加 DrawPicToHDC()成员函数的声明:

void DrawPicToHDC(IplImage *img, UINT ID);

添加类
3)C*Dlg 类对应的源文件(*Dlg.cpp)中添加 DrawPicToHDC() 函数的实现(在末尾处添加即可):记得修改下面代码中C**Dlg 类的名称

void CMFCV1Dlg::DrawPicToHDC(IplImage *img, UINT ID)
{
    CDC *pDC = GetDlgItem(ID)->GetDC();
    HDC hDC= pDC->GetSafeHdc();
    CRect rect;
    GetDlgItem(ID)->GetClientRect(&rect);
    CvvImage cimg;
    cimg.CopyOf( img ); // 复制图片
    cimg.DrawToHDC( hDC, &rect ); // 将图片绘制到显示控件的指定区域内
    ReleaseDC( pDC );
}

添加函数
4)为新增按钮的响应函数(OnBnClickedOpenImg)添加代码:

扫描二维码关注公众号,回复: 5956277 查看本文章
void CMFCV1Dlg::OnBnClickedButton1()
{
    // TODO: 在此添加控件通知处理程序代码
    IplImage *image=NULL; //原始图像
    if(image) cvReleaseImage(&image);
    image = cvLoadImage("D:\\图片\\01.jpg",1); //显示图片
    DrawPicToHDC(image, IDC_STATIC);
}

6. 编译运行,大功告成
结果1
结果2

7. 打开多张图片
只需再添加一个Button 控件按钮、一个Picture Control控件就行了
在新增的按钮里面增加响应函数,与单张的代码完全一样,只需修改最后一句DrawPicToHDC(image, IDC_STATIC);里面的IDC_STATIC,为新增的图片控件ID即可。

修改
最终结果为:
多张

猜你喜欢

转载自blog.csdn.net/weixin_42512266/article/details/88681800
今日推荐