2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

C++BuilderでOpenCV3.2を使えるようにする(32ビット編)

Last updated at Posted at 2023-02-17

はじめに

C++BuilderでOpenCVが利用できるのは、
OpenCV1のみと言うのが通説の様ですが、
もっと新しいバージョンのOpenCVを使いたいと思い、
色々探した結果、OpenCV-RSで成功したので、
その手順を記載します。

システム要件

必要なソフトウェアを記載します。

・Windows10または11の64ビット版
・C++Builder10.2以上(コミュニティエディションも可)
・Windows版cmake(GUI対応)
・Windows版git

C++Builderの最新コミュニティエディションの取得は以下のリンクを参照

cmake(Windows)は以下のリンクを参照(Windows x64 Installer:)

git(Windows)は以下のリンクを参照

それぞれのソフトウェアをセットアップしておきます。

OpenCV-RSリポジトリ(GitHub)のクローン

OpenCV-RSリポジトリを開く

コマンドプロンプトを開き、リポジトリからクローンしたい
ディレクトリに移動

(例)
c:
cd
mkdir OpenCV
cd OpenCV

OpenCV-RSのリポジトリのCode▼(緑色のボタン)をクリックして、
コピーボタンをクリックして、URLをクリップボードにコピー

コマンドプロンプトに

git clone␣

と入力して、右クリックで先ほどのURLを貼り付ける。

git.png

エンターキー押下でクローン実行。

cmake(windows)でビルド環境構築

ほとんどの手順はOpenCV^RSのREADME.mdに記載されていますが、
概略は以下の様になります。

cmake(windows)を起動します。

cmake.png

Where is the ... にクローンして出来たopencv_3.2.0フォルダのパスをセットします。

opencv_3.2.0フォルダの下に、buildフォルダを作成します。

where to build ... に作成したbuildフォルダのパスを設定します。

Cnfigreボタンをクリックして表示される画面で、
Borland Makefilesを選択して、Specify native compilersをチェックして、
Finishをクリックします。

コンパイラのパスを設定します。
コンパイラは「bcc32c.exe」のパスを指定します。
(32c以外は不可ですので注意してください)

cmake2.png

その上で

WITH_WEBP
WITH_JASPER
WITH_IPP
WITH_OPENEXR
BUILD_TESTS
BUILD_PERF_TESTS
BUILD_SHARED_LIBS

のチェックを外します。

OPENCV_ENABLE_NONFREE

をチェックして、

OPENCV_EXTRA_MODULES_PATH

に opencv_contrib_3.2.0\modules のパスを設定します。

【重要】
opencv_3.2.0\cmake\OpenCVCompilerOptions.cmake

の21と22行目の左端に#を入れてコメントアウトする。

OpenCVCompilerOptions.cmake 21~22行目変更前
    else()
      message(STATUS "Looking for ccache - not found")
OpenCVCompilerOptions.cmake 21~22行目変更後
#    else()
#      message(STATUS "Looking for ccache - not found")

※当方の判断で変更していますが、エビデンスはありません。この変更をしないとCnfigreが正常終了しません。

この状態で、再度Cnfigreボタンをクリックします。

Configuring done と表示されれば正常終了です。

上手く行かない場合は、ここまでの設定を見直して、
設定漏れがないかチェックしてください。

Cnfigre後、以下のオプションのチェックを外します。

BUILD_PROTOBUF
BUILD_opencv_dnn
BUILD_TIFF
WITH_TIFF

Generateボタンをクリックします。

Generating done と表示されれば、正常終了です。

上手く行かない場合は、ここまでの設定を見直して、
設定漏れがないかチェックしてください。

OpenCVをビルドする

コマンドプロンプトを開いて、opencv_3.2.0\build に移動する。

make コマンドを実行する。

bild.png

OpenCVのライブラリのビルドが開始されます。
100%まで行けばビルド成功です。

次にビルドした

ビルドが途中で異常終了する場合は、
これまでの設定を再確認するか、
対象のモジュールをビルドから外します。
bild2.png

上図の場合は、flann モジュールがコンパイルエラーを起こしているので、
BUILD_opencv_flann のチェックを外して、
CnfigreとGenerateを再度実行します。

モジュールのビルドをスキップするか等の処置は、
法則があるわけでないので、
その場で臨機応変に対応して下さい。

ビルドが正常終了した後は

make install

コマンドで、生成されたライブラリをインストールします。

OpenCVをC++Builderのプロジェクトで使用(サンプル)

C++BuilderのVCLアプリケーションプロジェクトで、
メニューの「プロジェクトに追加」で、
build\install\staticlib 以下の.libファイルを全て選択して、
プロジェクトに追加して下さい。

lib.png

※コンソールアプリではリンカーエラーが多発して動きません。

インクルードパスに

....\build\install\include

include.png

対応するパスを追加してください。

フォームにボタンを一つ配置して、
ボタンをダブルクリックして、OnClickイベントにコードを記述します。
その他インクルードなどを含めた全体のコードは以下になります。

Unit1.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include <opencv2/opencv.hpp>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	cv::namedWindow("lena");
	cv::namedWindow("test");

	cv::Mat img = cv::imread("lena.jpg",-1);
	cv::Mat gray;
	cv::Mat th;
	cv::Mat bin_img;

	cv::cvtColor(img,gray,cv::COLOR_RGB2GRAY);

	cv::threshold(gray,th,128,255,cv::THRESH_BINARY);

	cv::Canny(th,bin_img,100,200);

	std::vector<std::vector<cv::Point> > contours;
	cv::findContours(bin_img,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);

	cv::Mat cnt_img = cv::Mat::zeros(bin_img.rows,bin_img.cols, CV_8UC3);

	cv::drawContours(cnt_img,contours,-1, cv::Scalar(0,255,0));

	cv::imshow("lena",img);
	cv::imshow("test",cnt_img);

	cv::waitKey(0);

	cv::destroyAllWindows();
}
//---------------------------------------------------------------------------

これでビルドを行い出来たproject1.exe と同じフォルダに
定番の「len.jpg」を配置します。

lena.jpg

プログラムを実行して、
ボタンをクリックすると、
原画と輪郭の画像が表示されます。

result.png

何かキーを押下すると、プログラムは終了します。

これでC++BuilderでOpenCV 3.2 が利用可能になります。

64ビットへの対応

64ビットプロジェクトへの対応を次回説明します。
現在、ある程度は利用できるところまで来ているので、
安定して利用できるようになったら、
64ビット編を作成します。

以上

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?