日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

立体影像对观察量测平台(一)

發布時間:2023/12/29 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 立体影像对观察量测平台(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

打算做一個立體影像對的觀察和量測的平臺。為了防止遺忘,下面把實現步驟詳細記錄下來。

????? 擬采用單文檔程序實現,使用CxImage庫實現影像圖片的保存和顯示,使用拆分窗口分別顯示兩幅影像(或者使用一個窗口顯示互補色的兩幅影像)。

以下是詳細步驟。

?

(一)建立單文檔應用程序Stereo,視圖類CStereoView類使用CScrollView類為基類,便于以后視圖滾動,其余默認。

??????? 添加2個新視圖類(以默認的CStereoView類為基類)CLeftView和CRightView,用于顯示分割后的兩個左右視圖。

注意:這里兩個派生視圖類需要通過VC的類生成向導進行生成,且需要先使用MFC的CView類為基類,生成后再更改其基類為CStereoView類。否則在后面的CreateView函數中不符合RUNTIME_CLASS參數要求。

(二)建立分割窗口。

在CMainFrame類下添加:

CSplitterWnd類變量m_wndSplit,?? // 分割窗口

BOOL類型變量m_bCreateSpltr,???? // 是否已創建分割窗口,主要是用于OnSize消息中分隔欄的位置調整

BYTE類型變量m_btImageNum,????? // 判斷讀取的圖像應該存入哪個對象

OnSize消息??????????????????????????????????? // 調整窗口大小及分割欄的位置(居中)

OnCreateClient消息?????????????????????? // 實現分割窗口的功能

在OnCreateClient消息中實現分割窗口:

首先在當前框架下創建1行2列的分割窗口,m_wndSplit.CreateStatic(this,1,2)。創建成功,設置m_bCreateSpltr為真。

然后獲取客戶區大小,GetClientRec(rc)。

為分割窗口創建2個視圖,每個視圖寬度為客戶區寬度的一半,m_wndSplit.CreateView(0,0,RUNTIME_CLASS

(CLeftView),CSize(rc.Width()/2,rc.Height()),pContext);??? // (0,0)為左視圖,(0,1)為右視圖

設置分隔欄的位置,使其始終居中,即令兩個分割窗口始終大小相同,平分整個客戶區,該功能在OnSize消息中實現:

當分割窗口創建成功時,設置m_wndSplit的列寬為整個客戶區寬度的一半:

m_wndSplit.SetColumnInfo(0, rc.Width()/2, 0 )

然后重新計算顯示分割窗口:m_wndSplit.RecalcLayout()。

分割后的結果如圖:

?

(三)使用CxImage類庫加載和顯示圖像。

????? CxImage是一個源碼公開的免費的圖像操作庫,支持絕大多數圖像格式的讀寫和變換操作,使用它可以省去我們很多工作,我們不再需要針對各種圖像格式編寫相應的讀寫函數,從而利于我們將精力集中到要實現的主要功能上。現在CxImage庫最新版本是7.0,這里使用的是6.0版本。CxImage的詳細介紹見文章“CxImage圖像庫的使用”。

??????使用CxImage庫之前需要注意以下事項:

1.應用程序與CxImage的編譯版本必須一致,即應用程序是Debug,則CxImage庫也必須是Debug版。

2.VC環境設置為以下:

C++ --> Code Generation --> Use run-time library:Multithreaded DLL或Debug Multithreaded DLL

C++ --> Precompiled Headers:Not using precompiled Headers

C++ --> Preprocessor --> Additional include dircotories?:../CxImageInclude?? (CxImage庫頭文件的存放目錄)

Link -->General --> Object/library modules:至少添加一個cximage.lib,可以支持bmp、gif等格式的圖片,如果要支持jpeg、tiff等格式的圖片,需要再添加其他庫,這些庫都可以通過CxImage源碼工程生成。這里將lib文件都放置在工程目錄下的CxImageLib目錄下,因此這里填入的是:CxImageLib/cximage.lib CxImageLib/Jpeg.lib CxImageLib/Tiff.lib

Link --> Input --> Object/library modules:同上。

3.環境設置完即可以使用CxImage庫進行圖像的讀取和顯示操作了。

???? ?這里將圖像數據存放在文檔類中,即在CStereoDoc類中添加CxImage類的變量:m_xImage, m_xImageLeft, m_xImageRight。其中后兩個變量分別存放左右兩張影像,第一用于存放經過紅藍顏色合成后的影像。

??? ? 此外,為了使文件打開能自動識別左右,還需要添加一個BOOL變量:m_bLeftImage。

?? ?? 添加文件打開響應消息:OnFileOpen()。在該函數中設置文件打開對話框的文件格式過濾為我們支持的格式,如bmp、gif、jpeg、tiff等:

CString szFileExt = _T( "圖像格式文件(*.bmp,*.jpg,*.gif,*.tiff)|*.bmp;*.jpg;*.gif;*.tiff||" ) ;
CFileDialog fdlg( TRUE, NULL, NULL, NULL, szFileExt, NULL ) ;

?????? 讀取打開文件之前首先判斷要打開的是哪張圖像,左圖還是右圖。fdlg.DoModal后通過獲取文件名后綴來確定圖像文件的格式,然后調用相應的CxImage對象加載圖像:m_xImageLeft.Load( szFilePath, nImageType );

?????? 加載完圖像后,通知相應視圖顯示該圖像:pView = (CStereoView*)(((CMainFrame*)AfxGetMainWnd())->m_wndSplit.GetPane(0,0)); pView->Invalidate( FALSE ) ;

?????? 圖像的顯示需要在相應的視圖類中OnDraw函數中進行,首先判斷CxImage對象是否有效,如果已讀取了圖像,則顯示圖像:

pDoc->m_xImage.Draw( this->GetDC()->GetSafeHdc() ) ;

總結

以上是生活随笔為你收集整理的立体影像对观察量测平台(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。