在MFC中使用opencv2以上版本对图像进行显示

19 篇文章 0 订阅

前提是编译器已经配置好编译环境。

一、新建项目

菜单,文件 - 新建 - 项目


选择Visual C++,MFC应用程序,名称为MFC_DEMO


基于对话框,不使用Unicode库,在静态库中使用MFC,完成


出现如下界面


添加和设置控件

菜单,视图,工具箱,打开工具箱


选中Button控件


将Button从工具箱向窗体拖动,添加按钮


同理,添加Picture Control控件


右击Picture控件,属性,打开控件属性窗口,其ID为IDC_STATIC,修改Type为Rectangle


将Picture控件大小调整合适,如图


右击添加的按钮,属性


可将Caption改为OpenImg


右击按钮,添加事件处理程序


选择BN_CLICKED,类列表为CMFC_DEMODlg,函数名为OnBnClickedOpenImg,添加编辑


四、添加OpenCV的CvvImage文件

右击解决资源方案管理器中的头文件,添加,现有项,选择CvvImage.h


同样,源文件中添加CvvImage.cpp


在类视图或解决方案管理器中双击打开MFC_DEMODlg.h


添加代码

#include <opencv2\core\core.hpp>

#include <opencv2\highgui\highgui.hpp>
#include "CvvImage.h"

在MFC_DEMODlg.h文件中CMFC_DEMODlg类的声明中添加函数DrawPicToHDC()的声明

void DrawPicToHDC(IplImage *img, UINT ID);


在MFC_DEMODlg.cpp文件中添加函数

void CMFC_DEMODlg::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 );
}

在 C**Dlg.h 类所对应的源文件(**Dlg.cpp)的 BOOL CMFC_DEMODlg::OnInitDialog()添加:

    cv::namedWindow("view", cv::WINDOW_AUTOSIZE);
    HWND hWnd = (HWND)cvGetWindowHandle("view");
    HWND hParent = ::GetParent(hWnd);
    ::SetParent(hWnd, GetDlgItem(IDC_STATIC)->m_hWnd);
    ::ShowWindow(hParent, SW_HIDE);

响应鼠标左键,显示图像

在 OnBnClickedOpenImage 函数体内:

    cv::Mat img = cv::imread("./BaboonRGB.bmp");
    cv::imshow("view", img);
   
   
  • 1
  • 2
  • 1
  • 2


修正一个问题:

view窗口句柄的方法,虽然设置的view窗口是在相应ID的PictureControl上显示了,但显示的图片仍保持原本的尺寸大小,而不是根据在对话框中的PictureControl窗口大小自适应显示;

所以,在调用imshow(“view”, img) 前最好先加上:

    cv::Mat m_dst;
    cv::Mat img = cv::imread("./BaboonRGB.bmp");
    CRect rect;
    GetDlgItem(IDC_STATIC)->GetClientRect(&rect);
    cv::Rect dst(rect.left, rect.top, rect.right, rect.bottom);
    cv::resize(img, m_dst, cv::Size(rect.Width(), rect.Height()));
                                // 需要添加 #include <opencv2/imgproc/imgproc.hpp>
    cv::imshow("view", m_dst);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值