ページ 1 / 1
msys2でopenCVが使えない
Posted: 2019年1月07日(月) 01:23
by keito
たびたびお世話になっています。
C/C++/OpenCVの知識はそんなにないです。
msys2にてpacmanでclang++、make、openCV、その他依存パッケージもろもろをインストールしました。
以下のようなソースコードを書いて
コード:
// test.cpp
#include <opencv2/highgui.hpp>
using namespace cv;
int main()
{
Mat img = imread("image.png", 1);
imshow("image", img);
waitKey();
return 0;
}
コード:
#Makefile
INC = -I "C:\msys64\mingw64\include\opencv4"
DIR = -L "C:\msys64\mingw64\bin"
FLAGS = -lopencv_core401 -lopencv_highgui401
main:
clang++ $(INC) $(DIR) test.cpp $(FLAGS)
clang++にてコンパイルしましたが、
コード:
PS C:\Users\(ユーザー名)\Documents\source> make
clang++ -I "C:\msys64\mingw64\include\opencv4" -L "C:\msys64\mingw64\bin" test.cpp -lopencv_core -lopencv_highgui
C:\Users\Hiiragi\AppData\Local\Temp\test-2b4b06.o:(.text+0x57): undefined reference to `cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)'
clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Makefile:7: main] Error 1
と出て実行ファイルができませんでした。
他のサイトも調べましたが、よく分からないor試しても解決しませんでした。
分かる方がいたら助けをお願いします。
コード:
PS C:\Users\(ユーザー名)\Documents\source> clang++ -v
clang version 7.0.1 (tags/RELEASE_701/final)
Target: x86_64-w64-windows-gnu
Thread model: posix
InstalledDir: C:\msys64\mingw64\bin
PS C:\Users\(ユーザー名)\Documents\source> make -v
GNU Make 4.2.1
Built for x86_64-pc-msys
Copyright (C) 1988-2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Windows10(64bit)、OpenCVはver4.0.1-1です。
Re: msys2でopenCVが使えない
Posted: 2019年1月07日(月) 18:59
by Math
Re: msys2でopenCVが使えない
Posted: 2019年1月07日(月) 19:14
by Math
clang++ を試して見ました。
http://www2.koyoen.birdview.co.jp/~abcx ... g-002-.PNG
これが 正常に動作していますか?
それと OpenCVはどの様にしてインストールされましたか?
Re: msys2でopenCVが使えない
Posted: 2019年1月07日(月) 23:45
by keito
Mathさん、返答ありがとうございます。
#2はフォルダの名前やPATHが一部違いますが指定されたとおりに動きました。
#3も動いてます。
openCVはC:\msys64\mingw64.exeで
「pacman -S mingw-w64-x86_64-opencv」と打ってパッケージをインストールしました。多分「依存するパッケージも一緒にダウンロードしますか?」みたいな質問も出てたと思いますが、Yesを選んでたと思います。
Re: msys2でopenCVが使えない
Posted: 2019年1月07日(月) 23:57
by keito
#2のスクショが貼れてませんでした…。
念のためロケール設定も書いときます…(以前これの所為だったこともあったので)
・言語/システムロケールは英語[English (United States)]にしています。
・コントロールパネル>地域>システムロケールの変更>「ベータ:ワールドワイド言語サポートでUnicode UTF-8を使用」はオフにしてます。
Re: msys2でopenCVが使えない
Posted: 2019年1月08日(火) 00:22
by Math
Re: msys2でopenCVが使えない
Posted: 2019年1月08日(火) 20:21
by Math
今日は予期せぬ相談が2件あったので解決してのですが頭の動きが鈍くなったようなのでゆっくり検証してみます。
まずワーク・ディレクトリは
http://www2.koyoen.birdview.co.jp/~abcx ... 03-01-.PNG
min64.bat
コード:
set PATH=C:\msys64\mingw64\bin;C:\msys64\usr\local\bin;C:\msys64\usr\bin;C:\msys64\bin;%PATH%
set MSYSTEM=MINGW64
bash
コマンドプロンプトを立ち上げて make の ヘルプをしらべます。
http://www2.koyoen.birdview.co.jp/~abcx ... 03-02-.PNG
http://www2.koyoen.birdview.co.jp/~abcx ... 03-03-.PNG
http://www2.koyoen.birdview.co.jp/~abcx ... 03-04-.PNG
Re: msys2でopenCVが使えない
Posted: 2019年1月08日(火) 20:50
by keito
ディレクトリを回答者のものと一緒にしました。
make --helpできました。
Re: msys2でopenCVが使えない
Posted: 2019年1月08日(火) 21:17
by Math
keito さんの通りやると
test.cpp
コード:
// test.cpp
#include <opencv2/highgui.hpp>
using namespace cv;
int main()
{
Mat img = imread("image.png", 1);
imshow("image", img);
waitKey();
return 0;
}
Makefile
コード:
#Makefile
INC = -I "C:\msys64\mingw64\include\opencv4"
DIR = -L "C:\msys64\mingw64\bin"
FLAGS = -lopencv_core401 -lopencv_highgui401
main:
clang++ $(INC) $(DIR) test.cpp $(FLAGS)
http://www2.koyoen.birdview.co.jp/~abcx ... 03-05-.PNG
となります。
keito さんの参考にしたサイトとか教えて下さい・・
Re: msys2でopenCVが使えない
Posted: 2019年1月08日(火) 21:30
by Math
あ image.png が ない!
keito さん mage.png ください
Re: msys2でopenCVが使えない
Posted: 2019年1月08日(火) 21:45
by Math
Re: msys2でopenCVが使えない
Posted: 2019年1月08日(火) 21:48
by Math
keitoさん
サンプルプログラムが おかしく ないですか?
Re: msys2でopenCVが使えない
Posted: 2019年1月08日(火) 21:52
by keito
test.cppは↓のサイトを参考にしています。(コンパイルできるかの確認の為不要な部分はごっそり消してますが)
http://www.wakayama-u.ac.jp/~chen/cmake/cmakecv.html
Makefileはサイト探しても見つからなかったので自作です
Re: msys2でopenCVが使えない
Posted: 2019年1月08日(火) 21:58
by keito
test.cppの間違いってことですかね?確認してみます。
image.pngは正直なんでも良かったのでゲームのスクショ画像にしてます。
Re: msys2でopenCVが使えない
Posted: 2019年1月09日(水) 02:15
by keito
うーん、やはりよく分かりませんでした…
試しに
http://cvwww.ee.ous.ac.jp/semi/opencv/の1.1サンプルコードや
https://www.buildinsider.net/small/opencv/007の2.1.1サンプルコード
をtest.cppにコピペして試しましたがリンカエラーのままでした。
コンパイラのオプションかPATHの設定が間違っているのでしょうか?
Re: msys2でopenCVが使えない
Posted: 2019年1月09日(水) 06:20
by Math
*****************
2018年11月20日
画期的な3.0のリリースから約3年半後、私たちは4.xの最初の安定版リリースを発表できて嬉しいです。
ハイライトをリリース:
• OpenCVは現在C ++ 11ライブラリであり、
C ++ 11準拠のコンパイラが必要です。 最低限必要なCMakeのバージョンが3.5.1に引き上げられました。
•
OpenCV 1.xから多くのC APIが削除されました。
• コアモジュール内の永続性(XML、YAML、またはJSONとの間の構造化データの格納およびロード)は、C ++で完全に再実装され、
C APIも失いました。
•
新しいモジュールG-APIが追加されました。これは非常に効率的なグラフベースの画像処理パイプラインのエンジンとして機能します。
• dnnモジュールは、OpenVINO™ツールキットR4のDeep Learning Deployment Toolkitで更新されました。
DLDTをサポートするOpenCVの構築方法と使用方法のガイドを参照してください 。
• dnnモジュールは実験的なVulkanバックエンドを含み、ONNXフォーマットのネットワークをサポートします。
• 一般的なKinect Fusionアルゴリズムは、CPUとGPU(OpenCL)用に実装され最適化されています。
• QRコードディテクタとデコーダがobjdetectモジュールに追加されました
• 非常に効率的でありながら高品質のDIS高密度オプティカルフローアルゴリズムがopencv_contribからビデオモジュールに移動しました。
• 詳細は前回の発表: 4.0-alpha 、 4.0-beta 、 4.0-rcおよび変更履歴にあります。
*****************
に注意してください
まず 初歩的なプログラムから
test.cpp
コード:
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat image = Mat::zeros(100, 100, CV_8UC3);
imshow("", image);
waitKey(0);
}
Makefile はそのまま。
http://www2.koyoen.birdview.co.jp/~abcx ... 03-07-.PNG
Re: msys2でopenCVが使えない
Posted: 2019年1月09日(水) 06:34
by Math
test.cpp
コード:
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
int main(int argc, const char* argv[])
{
// 幅320px、高さ240pxで赤色の画像データを生成
cv::Mat redImg(cv::Size(320, 240), CV_8UC3, cv::Scalar(0, 0, 255));
// 画像表示用のウィンドウを生成
cv::namedWindow("red", cv::WINDOW_AUTOSIZE);
// ウィンドウに画像を表示
cv::imshow("red", redImg);
// キー入力を待機
cv::waitKey(0);
// 作成したウィンドウを全て破棄
cv::destroyAllWindows();
return 0;
}
http://www2.koyoen.birdview.co.jp/~abcx ... 03-11-.PNG
Re: msys2でopenCVが使えない
Posted: 2019年1月09日(水) 18:33
by keito
引き続き返信してくださりありがとうございます。
提示された2つのソースコードをコピペし実行しました。
コンパイル・リンカエラーは起きませんでした。
Re: msys2でopenCVが使えない
Posted: 2019年1月09日(水) 19:09
by Math
そうですよね。
keito さんのプログラムが どこで引っかかっているのかがわからないのですよ。
エラーメッセージが不思議なんですね。
OpenCV4のサンプルプログラムを探しているのですが…
( Version 4で大きくかわったみたいですよね! )
***
keitoさんのMakefile はいいようですが 引数などの情報をどうして得たのか教えて頂くとありがたいです。
Re: msys2でopenCVが使えない
Posted: 2019年1月09日(水) 19:16
by Math
Visual Stdio Code を使っているのですね(^^)/
私も使ってみます。
Re: msys2でopenCVが使えない
Posted: 2019年1月09日(水) 19:29
by keito
cv::imreadの引数は
http://opencv.jp/opencv-2.1/cpp/reading ... video.html
を参考にしています。
Mathさんの環境ではimage.pngを読み込んでウィンドウに表示させるプログラムが動くんでしょうか?
最新のリファレンスも確認しましたが、特に仕様の変更も見られず…
一応パッケージのバージョンを下げて(3.x.x)動くかどうかも確認してみます。
また、pkg-configというのがあるらしいのを知ったのでそれも試してみます。
(VS Code、最初は環境設定とかで戸惑いましたが、低スペックなPCでも快適なのでとても重宝してます。好き)
Re: msys2でopenCVが使えない
Posted: 2019年1月09日(水) 19:31
by keito
ああ、すみません、Makefileの引数の話でしたね、test.cppにある関数の引数と間違えました。
コンパイラのオプションまで書いてくれてるサイトが無かったので、#includeファイルを見て予測して書きました。
Re: msys2でopenCVが使えない
Posted: 2019年1月09日(水) 19:42
by Math
> #includeファイルを見て予測して書きました。
了解しました。引き続き 分かったら連絡します。
Re: msys2でopenCVが使えない
Posted: 2019年1月09日(水) 19:48
by keito
すみません、自己解決しました!
Makefileのオプションに「-lopencv_imgcodecs401」を付けたらコンパイルできました。
コード:
#Makefile
INC = -I "C:\msys64\mingw64\include\opencv4"
DIR = -L "C:\msys64\mingw64\bin"
FLAGS = -lopencv_core401 -lopencv_highgui401 -lopencv_imgcodecs401
main:
clang++ $(INC) $(DIR) test.cpp $(FLAGS)
imreadであらかじめ用意している画像ファイルを読み込むにはopencv_imagecodecs401.dllが必要だったみたいです。
公式リファレンスに必要なdllとかが載ってないの不親切ですね......
pkg-config(さっき存在知った)使えって事でしょうかね......
Re: msys2でopenCVが使えない
Posted: 2019年1月09日(水) 19:58
by Math
了解。良かったですね!コングラチュレーション!
Re: msys2でopenCVが使えない
Posted: 2019年1月23日(水) 11:29
by Math
昨年クリスマスに買ったWindows10に msys2
http://www.msys2.org/ を入れてしまったが
https://laboradian.com/win10-msys2/
に ”現在では、Windows 10 に WSL が実装されていますので、特に理由がなければ MSYS2 の代わりに WSL を使う方がよいでしょう”
のような記述があったので以前のPCのように WSL をまた導入してみます。
Re: msys2でopenCVが使えない
Posted: 2019年1月23日(水) 23:05
by Math
Re: msys2でopenCVが使えない
Posted: 2019年1月23日(水) 23:13
by Math
Re: msys2でopenCVが使えない
Posted: 2019年1月24日(木) 05:46
by Math
http://www2.koyoen.birdview.co.jp/~abcx ... -23-d-.PNG
Windows10 同様 update( と upgrade)は日日行わなければならないならないようです。
Re: msys2でopenCVが使えない
Posted: 2019年1月24日(木) 06:28
by Math
Re: msys2でopenCVが使えない
Posted: 2019年1月24日(木) 06:46
by Math
http://www2.koyoen.birdview.co.jp/~abcx ... -z222-.PNG
一度アンインストールしてみたが ここを右クリックすると アンインストール
メニューがでてくるのでクリックするだけで簡単である。
Re: msys2でopenCVが使えない
Posted: 2019年1月24日(木) 11:48
by Math
ついでなので Cygwin もインストールしてみました。
これで msys2、 Ubuntu(WSL)、 MinGW, Cygwin と 4つ Linux (gcc)
テスト環境がインストール出来ました。
http://www2.koyoen.birdview.co.jp/~abcx ... -zz-a-.PNG
Re: msys2でopenCVが使えない
Posted: 2019年1月24日(木) 11:53
by Math
Re: msys2でopenCVが使えない
Posted: 2019年2月10日(日) 19:04
by Math
Re: msys2でopenCVが使えない
Posted: 2019年2月11日(月) 17:48
by Math