【18】MFC入門到精通——MFC(VS2019)+ OpenCV 顯示圖片的3種方法

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;就是可能存在解的邏輯區域。這個在算法入門時應提到。 可行解 符合題意的解 單調性 …