Web Analytics

こつこつエンジニア

現役アプリ開発者によるIT系特化ブログ

【VS(C#)+OpenCV(C++)】画像ファイルから画像表示してみる

f:id:madai21:20211014185729j:plain

はじめに

Visual Studio Community 2019でC#のコンソールプロジェクトからOpenCV C++版を使って画像ファイルから読み込んだ画像をウィンドウで表示したいと思います。


もし、Python+OpenCVで画像をウィンドウで表示させたい場合はこの記事に書いてますので良かったらこちらもご覧ください。
madai21.hatenablog.com

環境

以下をすべて用意していることを前提とします。

.NETデスクトップ開発とC++によるデスクトップ開発の機能を使用します。
もし、インストール時にこれらの機能を入れていなければVisual Studio InstallerからVisual Studio Community 2019の変更でこれらの機能をインストールしておいて下さい。

構成図

こんなイメージです。
f:id:madai21:20210714001119p:plain

手順

  1. C#コンソールアプリプロジェクトを作成
  2. C++/CLI(OpenCVラッパー)プロジェクトを作成
  3. OpenCV C++版をダウンロード
  4. ソリューションの構成とプラットフォームを変更
  5. C++/CLI(OpenCVラッパー)プロジェクトの編集
  6. C#コンソールアプリプロジェクトの編集

1. C#コンソールアプリを作成

VisualStudio2019を起動し、新しいプロジェクトの作成からC# - コンソールアプリケーションを選択して次へを押します。
f:id:madai21:20210714000018p:plain
プロジェクト名はOpenCVConsoleAppとしましょう。
次へを押します。
f:id:madai21:20210714000038p:plain
作成を押します。
f:id:madai21:20210714000055p:plain

2. C++/CLI(OpenCVラッパー)を作成

ソリューションを右クリックし、追加→新しいプロジェクトを選択します。
f:id:madai21:20210714000130p:plain
C++ - CLRクラスライブラリ(.NET)を選択して次へを押します。
f:id:madai21:20210714000153p:plain
プロジェクト名はOpenCVWrapperとしましょう。
作成を押します。
f:id:madai21:20210714000213p:plain

3. OpenCV C++版をダウンロード

以下の場所からWindowsを選んでダウンロードします。
opencv.org
今回は4.5.2をダウンロードします。
f:id:madai21:20210714000413p:plain
opencv-4.5.2-vc14_vc15.exeがダウンロードされてると思うので起動します。
解凍先としてどこでもいいですが、今回はCドライブ直下とします。
Extract to:にC:\を入力し、Extractを押します。
f:id:madai21:20210714000433p:plain
これでC:\opencv以下にopenCV関連のファイルができました。

次はOpenCVをいつでもVisualStudioが使えるように環境変数のPathにOpenCVのパスを追加しましょう。
Windowsボタン→環境変数を入力しシステム環境変数の編集を選択します。
f:id:madai21:20210714000532p:plain
詳細設定タブの環境変数を押します。
f:id:madai21:20210714000547p:plain
システム環境変数のPathを選択し、編集を押します。
f:id:madai21:20210714000742p:plain
新規ボタンを押すと入力できるので
C:\opencv\build\x64\vc15\bin
と入力します。
f:id:madai21:20210714000817p:plain
OKボタンを順次押して行ってシステム環境変数の設定を終了しましょう。

4. ソリューションの構成とプラットフォームを変更

Debugとx64に変更しておきます。
f:id:madai21:20210714000857p:plain
※もしも、設定が表示されていない場合。
ツールバー右端のボタンからソリューション構成とソリューションプラットフォームを選択しておくと表示されると思います。
f:id:madai21:20210714000925p:plain
f:id:madai21:20210714000934p:plain

5. C++/CLI(OpenCVラッパー)プロジェクトの編集

OpenCVWrapperプロジェクトを右クリックし、プロパティを選択します。
f:id:madai21:20210714001213p:plain
C/C++ - 全般を選び、追加のインクルードディレクトリにC:\opencv\build\includeを入力します。
f:id:madai21:20210714001233p:plain
次にリンカ - 全般を選び、追加のライブラリディレクトリにC:\opencv\build\x64\vc15\libを入力します。
f:id:madai21:20210714001249p:plain
最後にリンカ - 入力を選び、追加の依存ファイルにopencv_world452d.libを入力し適用ボタンを押します。
そのあとOKボタンを押して設定画面を閉じましょう。
f:id:madai21:20210714001313p:plain
OpenCVWrapper.hを開いて以下の内容に編集します。

#pragma once
#include <opencv2/opencv.hpp>
#include <msclr/marshal_cppstd.h>
 
using namespace System;
using namespace msclr::interop;
 
namespace OpenCVWrapper {
	public ref class OpenCVWrapperCls
	{
	public:
		static void ShowImgFile(System::String^ filePath)
		{
			auto mat = cv::imread(marshal_as<std::string>(filePath));
			cv::imshow("Show Image File Window", mat);
			while (1)
			{
				auto key = cv::waitKey(1);
				if (key == 27) {
					break;
				}
			}
			cv::destroyAllWindows();
		}
	};
}

6. C#コンソールアプリプロジェクトの編集

OpenCVConsoleAppプロジェクトを右クリックし、追加→プロジェクト参照を選択します。
f:id:madai21:20210714004056p:plain
OpenCVWrapperをチェックし、OKボタンを押します。
f:id:madai21:20210714004114p:plain
Program.csを開いて以下の内容に編集します。

using System;
 
namespace OpenCVConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            OpenCVWrapper.OpenCVWrapperCls.ShowImgFile("madai.png");
        }
    }
}

F5を押してビルドと実行を行います。
この画面が出ればOKです。
f:id:madai21:20210714004204p:plain

おわりに

今回はOpenCVを導入し画像をそのまま表示させるところまでしました。
次回以降、OpenCVを使っていろいろしていきたいと思います^^