http://blog.csdn.net/chenyusiyuan/article/details/5628982
從去年12月底起,考試和基金、項目申報的事情一件連著一件,雙目視覺的課題給中止了4個月之久,看看論壇和博客上其他朋友所做的工作,自己已落後太多!得奮起直追了,呵呵,目前已完成了從 OpenCV2.0 到 2.1 版的移植,MFC 平台新增了一些實用的參數調整功能,後面還得結合 OpenGL 來做三維景深的重構,爭取學期結束前完成可見光部分的工作,並開始紅外成像的立體匹配研究。多機器人協作方面繼續保持理論學習和論文閱讀,保持對該領域動態的了解。
附上一段灰度圖轉偽彩色圖的代碼,我是用來顯示視差圖的:
- void CRobotVisionDlg::F_Gray2Color(CvMat* gray_mat, CvMat* color_mat)
- {
- if(color_mat)
- cvZero(color_mat);
- int stype = CV_MAT_TYPE(gray_mat->type), dtype = CV_MAT_TYPE(color_mat->type);
- int rows = gray_mat->rows, cols = gray_mat->cols;
- if (CV_ARE_SIZES_EQ(gray_mat, color_mat) && stype == CV_8UC1 && dtype == CV_8UC3)
- {
- CvMat* red = cvCreateMat(rows, cols, CV_8U);
- CvMat* green = cvCreateMat(rows, cols, CV_8U);
- CvMat* blue = cvCreateMat(rows, cols, CV_8U);
- CvMat* mask = cvCreateMat(rows, cols, CV_8U);
- cvSubRS(gray_mat, cvScalar(255), blue);
- cvCopy(gray_mat, red);
- cvCopy(gray_mat, green);
- cvCmpS(green, 128, mask, CV_CMP_GE );
- cvSubRS(green, cvScalar(255), green, mask);
- cvConvertScale(green, green, 2.0, 0.0);
- cvMerge(blue, green, red, NULL, color_mat);
- cvReleaseMat( &red );
- cvReleaseMat( &green );
- cvReleaseMat( &blue );
- cvReleaseMat( &mask );
- }
- }
試試 Live Writer 能不能直接發圖:
(1)BM 算法
(2)SGBM 算法
P.S.
(1)只有采用 UNICODE 字符集 才能使 MFC 界面顯示為 XP 樣式(見 stdafx.h 最後部分的 #ifdef _UNICODE),否則界面顯示為 Windows98/2000 樣式。
UNICODE 字符集的設置:Project - *** Properties - Configuration Properties - General - Character Set - Use Unicode Character Set 。
(2)CString 與 char* 的變換:
(A) CSting --> const char* (使用 CStringA 可以很方便地轉換至 const char*,對中文字符同樣有效)
注:使用CFileDialog類並設置 OFN_ALLOWMULTISELECT標志時,OPENFILENAME結構體的lpstrFile成員是一個指向用戶申請分配的緩沖區,裡面接受所選的路徑和文件名列表,這個列表的每一項由一個NULL隔開,最末以兩個NULL結束。nMaxFile成員指明了緩沖區的大小,如果所選擇的文件名的加起來的總長度超過了此值,則DoModal函數返回IDCANCEL,如果用戶試圖打開超過緩沖區大小的文件集的話,CommDlgExtendedError()將返回FNERR_BUFFERTOOSMALL,這時候,lpstrFile的前兩個byte將會包含實際需要的緩沖區的字節數。
(摘自CSDN博客:http://blog.csdn.net/FlowShell/archive/2009/10/08/4643167.aspx)
(B) char --> CString