MFC 顯示Mat,不使用Mat到CImage轉換

2021-08-14 08:25:37 字數 1397 閱讀 2107

【**

以下是key code:

1. 在oninitdialog初始化函式裡新增**

[cpp]view plain

copy

namedwindow(

"view"

,window_autosize);  

hwnd

hwnd = (

hwnd

) cvgetwindowhandle(

"view"

);  

hwnd

hparent = ::getparent(hwnd);  

::setparent(hwnd, getdlgitem(idc_static_pic)->m_hwnd);  

::showwindow(hparent, sw_hide);  

其中idc_static_pic是picture control圖形控制項的id;

2. 定義開啟按鈕事件

[cpp]view plain

copy

cstring picpath;   

//定義路徑變數

cfiledialog dlg(true, null, null, ofn_hidereadonly | ofn_overwriteprompt|ofn_allowmultiselect,   

null, this

);   

//選擇檔案對話方塊

if(dlg.domodal() == idok)  

//cstring to string  使用這個方法記得字符集選用「使用多位元組字元」,不然會報錯

string picpath=picpath.getbuffer(0);    

mat image=imread(picpath);     

mat imagedst;  

//以下操作獲取圖形控制項尺寸並以此改變尺寸

crect rect;  

getdlgitem(idc_static_pic)->getclientrect(&rect);  

rect dst(rect.left,rect.top,rect.right,rect.bottom);  

resize(image,imagedst,cv::size(rect.width(),rect.height()));   

imshow("view"

,imagedst);      

適應圖形控制項的顯示效果:

注: picture control控制項型別不需要必須是矩形(rectangle),使用預設的型別幀(frame)也可以正常顯示。

使用 vector儲存mat

void get video infor string video 這樣儲存,會出現vector中所有的指標都是指向的frame所指向的資料。也就是 程式執行後,frames中所有的元素指向的都capture最後一幀。可以這麼理解 1,vector中儲存的都指標,push back儲存指標。2,ca...

Mat 物件的使用

部分複製 一般情況下只會複製 mat 物件的頭和指標部分,不會複製資料部分 mat a imread src imagse mat b a 只複製 完全複製 如果把mat物件的頭部和資料部分一起複製,可以通過以下兩個api實現.mat f a.cone mat g a.copyto g mat物件使...

三 Mat類的使用

mat是一類,由兩個資料部分組成 矩陣頭 包含矩陣尺寸,儲存方法,儲存位址等 和乙個儲存所有畫素值的矩陣 可以是不同維度的矩陣 乙個儲存了所有畫素值,所以,不應該進行大的複製。opencv有個機制,針對同一張影象,讓每個mat有不同的矩陣頭,但是有相同的畫素矩陣,及共享乙個矩陣。這樣的做法,也會導致...