VS的MFC工程輸出列印資訊以及輸出mat型別圖
1、在要列印除錯的類中加上標頭檔案
#include <io.h>//Rain 用來輸出除錯資訊
#include <fcntl.h>//Rain
2、加入一個方法
void InitConsoleWindow()//Rain
{
int nCrt = 0;
FILE* fp;
AllocConsole();
nCrt = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
fp = _fdopen(nCrt, "w");
*stdout = *fp;
setvbuf(stdout, NULL, _IONBF, 0);
}
3、在類的初始化部分呼叫這個方法,比如在一個視窗內中呼叫的話,就在OnInitDialog方法中呼叫:
InitConsoleWindow();//Rain
4、在需要輸出除錯資訊的地方用printf()方法打出來,如:printf("====xdiff:%d",xdiff);
這樣,當程式執行就會彈出一個cmd控制檯,打印出除錯資訊(親測可用)
轉載自:http://blog.csdn.net/baggio1006/article/details/8217388
在mfc中要顯示opencv的圖形有以下辦法:
1、Cvvimage 類裡的函式 DrawPicToHDC( IplImage *img, UINT ID) 。現在opencv 3.0已經丟棄了這個類,需要自己去新增。
2、StretchDibBit的方法。有一個Mat 和點陣圖列數對應問題。
3、能否將opencv的圖形視窗嵌入圖形控制元件呢?
在初始化函式中加入如下程式碼。
- namedWindow("view", WINDOW_AUTOSIZE);
- HWND hWnd = (HWND)cvGetWindowHandle("view");
- HWND hParent = ::GetParent(hWnd);
- ::SetParent(hWnd, GetDlgItem(IDC_STATIC_MatToPic)->m_hWnd);
-
::ShowWindow(hParent, SW_HIDE);
下面就是在需要的地方 imshow("view", cvImgScaled);
影象大小與控制元件大小匹配,橫列等比例縮放
- DrawMatToPic(Mat cvImg, UINT ID)
- {
- CDC *pDC = GetDlgItem(ID)->GetDC();
- HDC hDCDst = pDC->GetSafeHdc();
- CRect rect;
- GetDlgItem(ID)->GetClientRect(&rect);
- int NewWidth = cvImg.cols;
- int NewHeight = cvImg.rows;
- double XScale = double(rect.right) / double(cvImg.cols);
- double YScale = double(rect.bottom) / double(cvImg.rows);
- if (XScale > YScale)
- {
- NewWidth = cvImg.cols*YScale;
- NewHeight = rect.bottom;
- }
- elseif (XScale < YScale)
- {
- NewWidth = rect.right;
- NewHeight = cvImg.rows*XScale;
- }
- cv::Size NewSize(NewWidth, NewHeight);
- cv::Mat cvImgScaled(NewSize, CV_8UC3);
- resize(cvImg, cvImgScaled, NewSize);
- imshow("view", cvImgScaled);
- }