1. 環境のインストール
OpenCV:リリース - OpenCV https://opencv.org/releases/ VS2022: Visual Studio: ソフトウェア開発者および Teams 用の IDE およびコード エディターVisual Studio 開発ツールとサービスを使用すると、開発者はあらゆるプラットフォームと言語でアプリケーションを開発できます。無料のコード エディターまたは IDE を使用して、いつでもどこでも開発できます。https://visualstudio.microsoft.com/zh-hans/?rr=https://www.microsoft.com/zh-cn/ インストールについては、関連するインストール チュートリアルを確認してください。
2.OpenCVのインストール
OpenCVをインストールし、固定アドレスに保存しますが、私はパスの設定を容易にし、誤って削除することを防ぐために、通常はCドライブにインストールします。以降のアップグレードで上書きされないように、インストール中にバージョンをマークします。
3. 環境変数
OpenCV がインストールされている場所をコンピューターに伝えます。「マイコンピュータ」を右クリック→「プロパティ」→「システムの詳細設定」→「環境変数」→「パス」パスの下に次のパスを追加します。
C:\opencv4.6.0\opencv\build\x64\vc15\bin
ここではCドライブにインストールされていますので、実際のインストールパスに合わせてbinファイルを追加してください。追加が完了したら、「OK」をクリックして環境設定を終了します。
4. VS2022 インクルード パス
VS2022 New MFC 基本ダイアログを起動し、メニューバーの[プロジェクト]→[プロパティ]をクリックし、プロジェクトを設定します。
1.VC++ ディレクトリ:
インクルードディレクトリ: C:\opencv4.6.0\opencv\build\include;
C:\opencv4.6.0\opencv\build\include\opencv2;
ライブラリディレクトリ: C:\opencv4.6.0\opencv\build\x64\vc15\lib;
2. コネクタ -> 入力:
追加の依存関係: opencv_world460d.lib;opencv_world460.lib;
注: opencv_world460d.lib; はデバッグ モードで呼び出され、opencv_world460.lib; はリリース モードで呼び出され、ここではデバッグ モードとして設定されているため、opencv_world460d.lib; のみが設定されます。
5. MFC で画像を開きます
1. 基本ダイアログ ボックスにピクチャ基本コントロールを追加し、属性 ID を IDC_picWND に変更します。
2. ヘッダー ファイルと名前空間を追加する
#include<opencv2/opencv.hpp> // OpenCV头文件
#include<opencv2/highgui/highgui_c.h> // OpenCV_GUI头文件
using namespace cv;
using namespace std;
3. ヘッダー ファイルで CRect 変数 m_picRect を定義し、xxDlg::OnInitDialog() にコードを追加します。
Dlg::OnInitDialog()
{
****
// TODO: 在此添加额外的初始化代码
SetWindowText(L"testOpenCV"); // 设置窗口名
cv::namedWindow("picView", WINDOW_AUTOSIZE); // 设置窗口名
HWND hWnd = (HWND)cvGetWindowHandle("picView"); // 获取窗口句柄
HWND hParent = ::GetParent(hWnd); // 指定子窗口的父窗口句柄
::SetParent(hWnd, GetDlgItem(IDC_picWND)->m_hWnd);
::ShowWindow(hParent, SW_HIDE);
CWnd* pWnd = GetDlgItem(IDC_picWND);
pWnd->GetClientRect(&m_picRect); // 获取图片控件大小
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
4. 「OK」ボタンコントロールをダブルクリックし、画像読み取りおよび表示コードを追加します。
void CopencvtestDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
Mat src = imread("山水.png");
if (src.empty())
{
AfxMessageBox(L"读取图片失败!");
return;
}
cv::resize(src, src, cv::Size(m_picRect.Width(), m_picRect.Height()));
imshow("picView", src);
waitKey(0);
CDialogEx::OnOK();
}
6. 運用効果
注: 初期化の実行中、CV ウィンドウの作成がフラッシュされます。初期化が完了すると、後の解像度のためにピクチャ空間に影が残ります。これは主に環境構成のテスト用です。