Opencv显示图片(MFC基于对话框窗口)

这篇具有很好参考价值的文章主要介绍了Opencv显示图片(MFC基于对话框窗口)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

#1.编辑对话框按钮,修改各个按钮窗口ID和绑定变量

Opencv显示图片(MFC基于对话框窗口),mfc,c++

picture 控件

Opencv显示图片(MFC基于对话框窗口),mfc,c++

“打开图片”按钮控件

Opencv显示图片(MFC基于对话框窗口),mfc,c++

Opencv显示图片(MFC基于对话框窗口),mfc,c++

Opencv显示图片(MFC基于对话框窗口),mfc,c++

Opencv显示图片(MFC基于对话框窗口),mfc,c++

#2.编写显示图片函数

void DrawMat(cv::Mat& img, UINT nID);

void DrawMat(cv::Mat& img, UINT nID);

.h文件进行声明

Opencv显示图片(MFC基于对话框窗口),mfc,c++

.cpp进行定义

//参数1:opencv即将读的图,
//参数2:需要展示的Picture Control的ID
void COPencv显示图片Dlg::DrawMat(cv::Mat& img, UINT nID)
{
    cv::Mat imgTmp;
    CRect rect;
    GetDlgItem(nID)->GetClientRect(&rect);  // 获取控件大小
    cv::resize(img, imgTmp, cv::Size(rect.Width(), rect.Height()));// 缩放Mat并备份
    // 转一下格式 ,这段可以放外面,
    switch (imgTmp.channels())
    {
    case 1:
        cv::cvtColor(imgTmp, imgTmp, CV_GRAY2BGRA); // GRAY单通道
        break;
    case 3:
        cv::cvtColor(imgTmp, imgTmp, CV_BGR2BGRA);  // BGR三通道
        break;
    default:
        break;
    }
    int pixelBytes = imgTmp.channels() * (imgTmp.depth() + 1); // 计算一个像素多少个字节
    // 制作bitmapinfo(数据头)
    BITMAPINFO bitInfo;
    bitInfo.bmiHeader.biBitCount = 8 * pixelBytes;
    bitInfo.bmiHeader.biWidth = imgTmp.cols;
    bitInfo.bmiHeader.biHeight = -imgTmp.rows;
    bitInfo.bmiHeader.biPlanes = 1;
    bitInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    bitInfo.bmiHeader.biCompression = BI_RGB;
    bitInfo.bmiHeader.biClrImportant = 0;
    bitInfo.bmiHeader.biClrUsed = 0;
    bitInfo.bmiHeader.biSizeImage = 0;
    bitInfo.bmiHeader.biXPelsPerMeter = 0;
    bitInfo.bmiHeader.biYPelsPerMeter = 0;
    // Mat.data + bitmap数据头 -> MFC
    CDC* pDC = GetDlgItem(nID)->GetDC();
    ::StretchDIBits(
        pDC->GetSafeHdc(),
        0, 0, rect.Width(), rect.Height(),
        0, 0, rect.Width(), rect.Height(),
        imgTmp.data,
        &bitInfo,
        DIB_RGB_COLORS,
        SRCCOPY
        );
    ReleaseDC(pDC);
}
    //————————————————
    ///版权声明:本文为CSDN博主「laolitou_1024」的原创文章,遵循CC 4.0 BY - SA版权协议,转载请附上原文出处链接及本声明。
//原文链接:https ://blog.csdn.net/laolitou_1024/article/details/124002068

Opencv显示图片(MFC基于对话框窗口),mfc,c++

#3.定义CString fun_LoadImg();函数

.h文件进行声明

CString fun_LoadImg();

Opencv显示图片(MFC基于对话框窗口),mfc,c++

.cpp文件进行定义

CString COPencv显示图片Dlg::fun_LoadImg()
{
	// TODO: 在此添加命令处理程序代码
	CString imagePath = L"";//选择的图片全路径
	BOOL isOpen = TRUE;		//是否打开(否则为保存)
	CString defaultDir = L"E:\\";	//默认打开的文件路径
	CString fileName = L"";			//默认打开的文件名
	CString filter = L"文件 (*.bmp; *.jpg;*.png)|*.bmp;*.jpg;*.png||";	//文件过虑的类型
	CFileDialog openFileDlg(isOpen, NULL, defaultDir + fileName, OFN_HIDEREADONLY | OFN_READONLY, filter, NULL);
	if (openFileDlg.DoModal() == IDOK)
	{
		imagePath = openFileDlg.GetPathName();
	}
	return imagePath;
}

Opencv显示图片(MFC基于对话框窗口),mfc,c++

#4.双击“打开图片”按钮

系统自动弹出响应函数

Opencv显示图片(MFC基于对话框窗口),mfc,c++

void COPencv显示图片Dlg::OnBnClickedBtnOpen()
{
	// TODO:  在此添加控件通知处理程序代码
	USES_CONVERSION;//和下一行的W2A的目的一样,是为了CString类型转const String
	Mat src = imread(W2A(fun_LoadImg()), 1);
	DrawMat(src, IDC_PIC_SHOW);
}

Opencv显示图片(MFC基于对话框窗口),mfc,c++

5.运行程序,显示结果

Opencv显示图片(MFC基于对话框窗口),mfc,c++

Opencv显示图片(MFC基于对话框窗口),mfc,c++

Opencv显示图片(MFC基于对话框窗口),mfc,c++文章来源地址https://www.toymoban.com/news/detail-851948.html

到了这里,关于Opencv显示图片(MFC基于对话框窗口)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MFC 通用对话框之颜色对话框

    CColorDialog类封装了颜色对话框,此类允许您将颜色选择对话框合并到应用程序中。颜色对话框就像画家的调色板一样,可显示系统定义的颜色列表,用户可以从列表中选择或创建特定颜色。构造一个CColorDialog类对象后,可用 DoModal( ) 函数来显示颜色对话框。 CColorDialog 的构造

    2024年02月06日
    浏览(53)
  • MFC 通用对话框之文件对话框

    CFileDialog 类 封装了Windows通用文件对话框,Windows通用文件对话框提供了轻松实现与Windows标准一致的打开文件、保存文件、另存文件对话框的方法。 当我们用CFileDialog类的构造函数生成一个对象后就修改 m_ofn 结构体对象里的值, m_ofn 的类型为 OPENFILENAME。 CFileDialog类构造函数的

    2024年02月05日
    浏览(64)
  • MFC(十二)多个对话框

    我们来制定多个对话框,每个对话框都有不同的功能,单击下一步,即可跳转到下一个对话框 1.新建一个启动按钮 2.在资源视图,Dialog里面,右键--添加资源----dialog====选择IDD PROPPAGE_SMALL新建 属性页,改名为PROP01 3.打开工具箱,添加group box,group box控件的作用是建立了一个分

    2024年02月07日
    浏览(47)
  • MFC(十三)多个对话框

    1.打开类视图,右键项目---类向导--添加Cpropsheet类,命名为mypropsheet CPropertySheet 是 MFC 的一个类,用于创建包含多个属性页的对话框。它可以使用内置的向导模式,向用户显示“下一步”和“上一步”按钮 2.在Cmypropsheet.h中,声明三个属性类的对象  3.在构造函数里,把三个对

    2024年02月08日
    浏览(46)
  • MFC为对话框资源添加类

    VC6新建一个对话框类型的工程; 建立之后资源中默认有2个对话框,一个是主对话框,About这个是默认建立的关于版权信息的; 然后主对话框有对应的.h和.cpp文件;可以在其中进行编程;   默认建立的有一个 关于 对话框;   在资源中新插入一个对话框,IDD_DIALOG1是对话框I

    2024年02月01日
    浏览(45)
  • MFC 对话框与控件的使用

    1、 熟悉 Windows 对话框应用程序开发的基本过程; 2、 学习标准控件的使用; 3、 学些 CommonDialog ActiveX 控件的使用; 4、 练习较复杂的交互式操作的控制流程; 5、 练习文件输入/输出流的使用。 实现一个具有一定实用价值的通讯录程序设计。界面如图所示 ①界面的基本设计

    2024年02月05日
    浏览(40)
  • MFC--对话框的一个画图控件-HighSpeedChart

    下载链接在最下面  (免费) 可在vs2022,vs2019等vs版本使用  成果展示 下载好文件后,将  整个文件夹,添加到项目中,  1.之后,将控件拖到对话框里,修改属性到与图片相同            2.为对话框添加类,我这里添加的是  3.为控件增加变量,因为不是VS自带的控件 4.点

    2024年02月04日
    浏览(83)
  • MFC 单文档弹出对话框 标题图标

    创建MFC时 1、应用程序类型:以单个文档-项目样式选择MFC标准 菜单关联对话框  2、菜单关联-资源视图中的Menu-IDR_MAINFRAME(此处看想关联谁,如果是想关联一个对话框,那就先创建一个对话框再进行关联,如果是想关联一个类,可以看函数在哪个类下面从而进行关联) a.关联

    2024年02月06日
    浏览(42)
  • MFC第十八天 非模式对话框、对话框颜色管理、记事本项目(查找替换、文字和背景色、Goto(转到)功能的开发)

    a)调用CDialog::Create函数实现,例如:QQ的聊天框,记事本的查找等。 b)非阻塞,对象的生命期必须足够,否则就析构时摧毁了。 c)可以采用堆空间申请多例模式,也可以用全局或者成员。 d)EndDialog只对模式对话框有效,对非模式对话框无效,如果要摧毁调用DestroyWindow (只是隐

    2024年02月17日
    浏览(53)
  • 第三篇:对话框窗口部件 QDialog

    对话框(Dialog)是计算机图形用户界面(GUI)中的一种常见窗口类型, 通常用于与用户进行交互、获取信息、提供反馈或执行特定任务 。对话框的主要目的是与用户进行短期的、有限的交互,以完成特定的操作或任务,然后将控制返回给应用程序的主窗口或上下文。 按照运

    2024年02月11日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包