MFC (VS2019)+ OpenCV,显示图片的3种方法

  • 1 方法介绍
  • 2 方法一:嵌套OpenCV窗口显示图片
    • 2.1 建立供工程 添加控件
    • 2.2 引用头文件
    • 2.3 找到OnInitDialog()函数,在其中添加如下代码
    • 2.4 在button触发函数中加入代码(就是你双击button进入的函数)
    • 2.5 注意事项
  • 3 方法二: 转换图片格式
    • 3.1 MatToCImage格式转换 定义
    • 3.2 OnPaint() 添加代码 画出图像
  • 4 方法三: OpenCV图片保存后,再用FMC读取显示
    • 4.1 添加代码
    • 4.2 为什么要先保存在读取呢?

1 方法介绍

1、嵌套。 直接将OpenCV窗口嵌套到MFC的Pictrue Control控件中。此方法既能直接显示图片,也可直接使用OpenCV的鼠标按键事件,但对于鼠标滚轮事件只能使用MFC本地的滚轮函数。

2、转换。 将OpenCV读取或处理的图片转换格式,使之成为MFC的Pictrue Control控件可显示的图片格式。此方法每刷新一次图片便需要转换格式一次,比较麻烦,且只能使用MFC的鼠标事件。

3、保存。 将OpenCV读取或处理的图片保存为本地图片,然后用MFC读取图片的方法读取并显示。此方法是笨方法,在特定情况下使用,保存和读取图片比较耗时,但无需转换格式,同样只能使用MFC的鼠标事件。

2 方法一:嵌套OpenCV窗口显示图片

嵌套。直接将OpenCV窗口嵌套到MFC的Pictrue Control控件中。此方法既能直接显示图片,也可直接使用OpenCV的鼠标按键事件,但对于鼠标滚轮事件只能使用MFC本地的滚轮函数。

2.1 建立供工程 添加控件

新建工程,命名为 showRealVideo,创建好之后,自动生成以下文件
在这里插入图片描述

打开对话框后,
在工具箱选择picture control控件,并拖到对话框内,(右键修改属性),修改ID为IDC_PICTURE_STATIC
添加一个Button按钮,修改ID为IDC_PICTURE_BUTTON,描述文字为 “显示图像”

在这里插入图片描述

在这里插入图片描述

双击button (“显示图像”)按钮,之后可以进入****Dlg.cpp,在里面进行如下修改代码
在这里插入图片描述

在这里插入图片描述

编写代码,只需修改MFCApplication1Dlg.cpp文件。

具体修改步骤如下:

2.2 引用头文件

在showRealVideoDlg.cpp中 添加opencv头文件
在这里插入图片描述

#include <opencv2/opencv.hpp>
//cvGetWindowHandle("ImageShow");//嵌套opencv窗口,需要使用下面头文件
#include<opencv2/highgui/highgui_c.h>

2.3 找到OnInitDialog()函数,在其中添加如下代码

在这里插入图片描述

// TODO: 在此添加额外的初始化代码cv::namedWindow("ImageShow");//创建OpenCV窗口HWND  hWnd = (HWND)cvGetWindowHandle("ImageShow");//嵌套opencv窗口HWND hParent = ::GetParent(hWnd);::SetParent(hWnd,GetDlgItem(IDC_PICTURE_STATIC)->m_hWnd);::ShowWindow(hParent,SW_HIDE);

2.4 在button触发函数中加入代码(就是你双击button进入的函数)

在这里插入图片描述

void CshowRealVideoDlg::OnBnClickedPictureButton()
{// TODO: 在此添加控件通知处理程序代码cv::Mat img = cv::imread("D:\\Projects\\test_Images\\9.jpg");CRect rect;CWnd* pWnd = GetDlgItem(IDC_PICTURE_STATIC);//获取picture control控件pWnd->GetClientRect(&rect);//控制图片的大小cv::resize(img, img, cv::Size(rect.Width(), rect.Height()));//将图片resize,适用窗口尺寸imshow("ImageShow", img);}

在这里插入图片描述
在这里插入图片描述

2.5 注意事项

如果图片没有resize,那么图片将以原尺寸显示,不会自适应窗口大小;

超出窗口以外的尺寸,就不会显示。

void CshowRealVideoDlg::OnBnClickedPictureButton()
{// TODO: 在此添加控件通知处理程序代码cv::Mat img = cv::imread("D:\\Projects\\test_Images\\9.jpg");CWnd* pWnd = GetDlgItem(IDC_PICTURE_STATIC);//获取picture control控件imshow("ImageShow",img);
}

在这里插入图片描述

也可以将代码全部写在Button按钮函数中,
即将OnInitDialog()函数中自己添加的代码,剪切到OnBnClickedPictureButton()函数里。
在这里插入图片描述

3 方法二: 转换图片格式

转换。 将OpenCV读取或处理的图片转换格式,使之成为MFC的Pictrue Control控件可显示的图片格式。此方法每刷新一次图片便需要转换格式一次,比较麻烦,且只能使用MFC的鼠标事件。

1、新建MFC应用程序、添加Pictrue Control控件(同上)

2、引用头文件

在showRealVideoDlg.cpp中 添加opencv头文件,
并声明函数 void MatToCImage(Mat &mat, CImage &cImage);
在这里插入图片描述

#include <opencv2/opencv.hpp>
	void MatToCImage(cv::Mat& mat, CImage& cImage);

3.1 MatToCImage格式转换 定义

//在CshowRealVideoDlg::.cpp最后添加MatToCImage函数定义:

//将OpenCV处理的Mat图片格式 转换为MFC的Pictrue Control控件可显示的CImage格式
void CshowRealVideoDlg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/89831.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/89831.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/89831.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以“融合进化 智领未来”之名,金仓Kingbase FlySync:国产数据库技术的突破与创新

目录开篇&#xff1a;国产数据库的历史性跨越一、KFS 产品定位及发展历程回顾1.1 Kingbase FlySync 发展1.2 Kingbase FlySync与Oracle GoldenGate的对比分析1.2.1 Kingbase FlySync 功能优势1.2.2 技术架构对比1.2.3 性能与扩展性二、数字化时代的新挑战2.1 决策实时性要求越来…

服务器配置错误漏洞

文章目录一、文件解析漏洞1.Apache HTTPD多后缀解析漏洞二、目录遍历漏洞1.Apache目录遍历漏洞2.Nginx目录穿越漏洞服务器配置错误漏洞指因服务器&#xff08;含系统、Web服务、数据库等&#xff09;的参数设置、权限分配、组件配置等不当&#xff0c;导致的安全问题&#xff0…

大模型预测输尿管上段结石技术方案大纲

目录 1. 术前阶段 2. 术中阶段 3. 术后阶段 4. 并发症风险预测 5. 根据预测定手术方案 6. 麻醉方案 7. 术后护理 8. 统计分析 9. 技术验证方法 10. 实验证据 11. 健康教育与指导 12. 完整术方案流程图(Mermaid) 1. 术前阶段 步骤 关键要素 可编辑字段 1.1 影像采集 CT-IVU / …

docker compose 编排容器 mysql Springboot应用

写一个docker-compose.yml文件 内容如下&#xff1a; services:db:image: "docker.xuanyuan.me/library/mysql:8.3.0"restart: unless-stoppedhostname: dbports:- "3306:3306"container_name: mysqlenvironment:- "MYSQL_ROOT_PASSWORD1234"m…

React 中 props 的最常用用法精选+useContext

✅ React 最常用 props 用法 10 例✅ 1. 传递字符串 / 数字 / 布尔值function UserCard({ name, age, isVip }) {return (<div>{name} - {age} - {isVip ? VIP : 普通用户}</div>); }<UserCard name"张三" age{18} isVip{true} />✅ 2. 传递函数&…

离散型制造企业的可视化破局:设备OEE动态看板与工艺路径模拟实践

内容摘要离散型制造企业面临着设备效率低下、生产过程不透明、工艺路径复杂等诸多挑战。如何通过可视化手段提升设备效率和生产透明度&#xff0c;成为企业亟待解决的问题。设备整体效率&#xff08;OEE&#xff09;动态看板和工艺路径模拟是两个关键的可视化工具&#xff0c;能…

在Tailwind Css中如何书写flex布局

仅供参考 文章目录一、启用 flex 布局二、行内 flex 布局三、方向控制四、对齐方式五、子元素控制1、控制子元素的宽度是否可伸缩2、控制子元素顺序3、控制子元素间的间隙4、控制子元素是否可换行显示一、启用 flex 布局 设置 class“flex” 启用 flex 布局 <template>…

交通出行大前端与 AI 融合:智能导航与出行预测

交通出行类大前端应用&#xff08;导航APP、打车软件、公交地铁小程序等&#xff09;是连接用户与出行服务的核心载体&#xff0c;其核心价值在于“高效规划路径、精准规避拥堵、适配个性化需求”。传统导航依赖固定规则&#xff08;如“最短路径优先”&#xff09;和历史数据&…

csc(x)积分推导

在MATLAB中同时绘制 sin⁡(x), csc(x) 和 ln⁡∣tan⁡(x/2)∣的函数图像&#xff0c;需要处理函数的奇点&#xff08;如 csc⁡(x) 在 sin⁡(x)0 时无定义&#xff0c;ln⁡∣tan⁡(x/2)∣ 在 xkπ 时无定义&#xff09;&#xff08;deepseek生成matlab代码&#xff09;% 定义x范…

rtsp协议之.c++实现,rtsp,rtp协议框架,模拟多路音视频h264,265,aac,数据帧传输,接收(二)

rtsp协议之.c实现&#xff0c;rtsp&#xff0c;rtp协议框架&#xff0c;模拟多路音视频h264&#xff0c;265&#xff0c;aac&#xff0c;数据帧传输&#xff0c;接收&#xff08;二&#xff09; 1、RTSP 服务器核心&#xff1a;处理 RTSP 会话管理、请求解析和响应生成 2、媒体…

网络性能与应用性能的协同优化研究:基于小波变换与CNN的图像分类系统

网络性能与应用性能的协同优化研究&#xff1a;基于小波变换与CNN的图像分类系统 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 摘要 本文研究了网络性能&#xff08;延迟、带宽、丢…

【网络安全领域】CTF竞赛指南:赛事详解、热门平台与信息获取方式

CTF&#xff08;Capture The Flag&#xff09;&#xff0c;中文称为夺旗赛&#xff0c;是网络安全领域中一种备受关注和欢迎的竞赛形式。以下是关于 CTF 竞赛的详细介绍&#xff0c;以及一些参赛平台和相关咨询途径&#xff1a; CTF 竞赛详解 起源&#xff1a;CTF 起源于 199…

进程(以及系统调用和库函数概念)

计算机管理硬件&#xff1a;先去组织起来再去描述起来&#xff08;类比先去组织小组&#xff0c;再去详细描述工作&#xff09;系统调用和库函数概念&#xff1a;系统就像是银行&#xff0c;会去防着我们&#xff0c;但是会释放一些接口用于我们使用&#xff0c;这个就是叫做系…

linux + 宝塔面板 部署 django网站 启动方式:uwsgi 和gunicorn如何选择 ?

启动方式:uwsgi 和gunicorn如何选择 ? 项目uWSGIGunicorn协议uWSGI 协议&#xff08;可用 HTTP/socket&#xff09;HTTP 协议启动方式命令或 .ini 配置文件命令参数或 systemd 配置兼容框架支持 WSGI、uWSGI、FastCGI 等仅支持 WSGI性能高性能、极可调高性能、默认参数也够用配…

基于有监督学习的主动攻击检测系统

核心功能&#xff1a;登录注册功能主仪表板功能&#xff1a;实时展示检测结果和图表分析&#xff0c;模型准确率、攻击次数等。数据管理功能&#xff1a;加载训练数据、预处理数据&#xff08;使用开源KDD数据集做为模型训练数据)。模型训练功能&#xff1a;支持随机森林、支持…

simulink系列之模型接口表生成及自动连线脚本

总目录 simulink系列之汽车应用层信号处理 第一章 simulink信号处理——debounce 第二章 simulink接口表生成及自动连线脚本 目录 前言 一、simulink接口表生成脚本 1.使用方法&#xff1a; 二、模型整理连线脚本 1.使用方法&#xff1a; 总结 前言 本系列主要围绕作者采用si…

Eureka+LoadBalancer实现服务注册与发现

目录 一、相关文章 二、兼容说明 三、服务注册到EurekaServer 四、服务发现 五、LoadBalancer负载均衡 一、相关文章 基础工程&#xff1a;gradle7.6.1springboot3.2.4创建微服务工程-CSDN博客 Eureka服务端启动&#xff1a;Eureka服务端启动-CSDN博客 LoadBalancer官方…

数据存储方案h5py

对于百万级别的大规模数据&#xff08;假设 N > 1,000,000&#xff09;&#xff0c;在保证读取速度的前提下&#xff0c;需要综合考虑 存储效率、I/O 吞吐 和 内存管理。以下是针对超大规模数据的优化方案&#xff1a;&#x1f680; 终极方案&#xff1a;HDF5 (h5py) 分块存…

ARINC818协议综述

概要 航天领域ARINC818协议 协议的视频帧 协议的层次 帧格式 容器 FC协议的5个层次 8b10b编码 SOF EOF IDLEARINC818视频传输协议 ARINC818协议的容器系统 帧头控制协议FHCP 光纤通道协议 FC-AV ARINC818行场同步解析&#xff0c;上图时序图是关于行场同步小信号相关。ARINC818…

专题 二分法:查找与判定

概念解释 概述 二分法在算法竞赛中一般有这么一个用途&#xff1a;在一个具有单调性的解空间中找到符合题意的一个可行解。下面解释几个专有名词&#xff1a; 解空间 很简单&#xff0c;就是可能存在解的逻辑区域。这个在算法入门时应提到。 可行解 符合题意的解 单调性 …