VS 2013 MFCは直接OpenCV 2を操作する.0/3.0ライブラリ内のMat構造の画像をPicture Control(画像コントロール)に渡す
3152 ワード
上記VS 2013 MFC+OpenCV 3に続く.0画像を開く;
OpenCV 1から0 OpenCV 2に着きました.0はさらに高く、MFCベースの画像処理プログラムを書くときにOpenCVの旧式の文法構造に戻るのは難しい.
このような優雅な方式は、MFCフレームワークの中で、OpenCV 2.0ライブラリのMat形式のピクチャをPicture Control(ピクチャコントロール)表示に直接伝える方法があることを知っていますか?
コード修正セクションに直接アクセスします.
1.必要なヘッダファイルを追加
C**Dlgクラスに対応するヘッダファイル(**Dlg.h)に次のように追加します.
2.OpenCVウィンドウの作成
C**Dlgで.hクラスに対応するソースファイル(**Dlg.cpp)の
3.マウスの左ボタンに応答して、画像を表示する
OnBnClickedOpenImage関数内:
4.一つの問題を修正する
ビューウィンドウハンドルの方法は、設定されたビューウィンドウが対応するIDのPictureControlに表示されているが、表示された画像はダイアログボックスのPictureControlウィンドウサイズに応じて適応的に表示されるのではなく、元のサイズのままである.
したがって、imshow(「view」,img)を呼び出す前に、以下を加えたほうがいい.
OpenCV 1から0 OpenCV 2に着きました.0はさらに高く、MFCベースの画像処理プログラムを書くときにOpenCVの旧式の文法構造に戻るのは難しい.
このような優雅な方式は、MFCフレームワークの中で、OpenCV 2.0ライブラリのMat形式のピクチャをPicture Control(ピクチャコントロール)表示に直接伝える方法があることを知っていますか?
コード修正セクションに直接アクセスします.
1.必要なヘッダファイルを追加
C**Dlgクラスに対応するヘッダファイル(**Dlg.h)に次のように追加します.
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include "CvvImage.h"
2.OpenCVウィンドウの作成
C**Dlgで.hクラスに対応するソースファイル(**Dlg.cpp)の
BOOL CMFC_DEMODlg::OnInitDialog()
を追加します. cv::namedWindow("view", cv::WINDOW_AUTOSIZE);
HWND hWnd = (HWND)cvGetWindowHandle("view");
HWND hParent = ::GetParent(hWnd);
::SetParent(hWnd, GetDlgItem(IDC_STATIC)->m_hWnd);
::ShowWindow(hParent, SW_HIDE);
3.マウスの左ボタンに応答して、画像を表示する
OnBnClickedOpenImage関数内:
cv::Mat img = cv::imread("./BaboonRGB.bmp");
cv::imshow("view", img);
4.一つの問題を修正する
ビューウィンドウハンドルの方法は、設定されたビューウィンドウが対応するIDのPictureControlに表示されているが、表示された画像はダイアログボックスのPictureControlウィンドウサイズに応じて適応的に表示されるのではなく、元のサイズのままである.
したがって、imshow(「view」,img)を呼び出す前に、以下を加えたほうがいい.
cv::Mat m_dst;
cv::Mat img = cv::imread("./BaboonRGB.bmp");
CRect rect;
GetDlgItem(IDC_STATIC)->GetClientRect(&rect);
cv::Rect dst(rect.left, rect.top, rect.right, rect.bottom);
cv::resize(img, m_dst, cv::Size(rect.Width(), rect.Height()));
// #include <opencv2/imgproc/imgproc.hpp>
cv::imshow("view", m_dst);