msys2でopenCVが使えない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
keito
記事: 33
登録日時: 3年前

msys2でopenCVが使えない

#1

投稿記事 by keito » 3ヶ月前

たびたびお世話になっています。
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です。

Math

Re: msys2でopenCVが使えない

#2

投稿記事 by Math » 3ヶ月前

今 msys2 を導入し clang を試してみました。

http://www2.koyoen.birdview.co.jp/~abcx ... g-001-.PNG

まず これが正常に動いてますか?

Math

Re: msys2でopenCVが使えない

#3

投稿記事 by Math » 3ヶ月前

clang++ を試して見ました。

http://www2.koyoen.birdview.co.jp/~abcx ... g-002-.PNG

これが 正常に動作していますか?


それと OpenCVはどの様にしてインストールされましたか?

keito
記事: 33
登録日時: 3年前

Re: msys2でopenCVが使えない

#4

投稿記事 by keito » 3ヶ月前

Mathさん、返答ありがとうございます。

#2はフォルダの名前やPATHが一部違いますが指定されたとおりに動きました。
#3も動いてます。

openCVはC:\msys64\mingw64.exeで
「pacman -S mingw-w64-x86_64-opencv」と打ってパッケージをインストールしました。多分「依存するパッケージも一緒にダウンロードしますか?」みたいな質問も出てたと思いますが、Yesを選んでたと思います。
添付ファイル
Untitled11.png
#3

keito
記事: 33
登録日時: 3年前

Re: msys2でopenCVが使えない

#5

投稿記事 by keito » 3ヶ月前

#2のスクショが貼れてませんでした…。

念のためロケール設定も書いときます…(以前これの所為だったこともあったので)
・言語/システムロケールは英語[English (United States)]にしています。
・コントロールパネル>地域>システムロケールの変更>「ベータ:ワールドワイド言語サポートでUnicode UTF-8を使用」はオフにしてます。
添付ファイル
Untitled10.png
#2

Math

Re: msys2でopenCVが使えない

#6

投稿記事 by Math » 3ヶ月前

ありがとうございます。インストール出来ました。

明日 1日用があるので 明日夕方見てみます。

http://www2.koyoen.birdview.co.jp/~abcx ... 8-001-.PNG

http://www2.koyoen.birdview.co.jp/~abcx ... 8-002-.PNG

Math

Re: msys2でopenCVが使えない

#7

投稿記事 by Math » 3ヶ月前

今日は予期せぬ相談が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

keito
記事: 33
登録日時: 3年前

Re: msys2でopenCVが使えない

#8

投稿記事 by keito » 3ヶ月前

ディレクトリを回答者のものと一緒にしました。
make --helpできました。
添付ファイル
Untitled12.png

Math

Re: msys2でopenCVが使えない

#9

投稿記事 by Math » 3ヶ月前

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 さんの参考にしたサイトとか教えて下さい・・

Math

Re: msys2でopenCVが使えない

#10

投稿記事 by Math » 3ヶ月前

あ image.png が ない!

keito さん mage.png ください


Math

Re: msys2でopenCVが使えない

#12

投稿記事 by Math » 3ヶ月前

keitoさん

サンプルプログラムが おかしく ないですか?

keito
記事: 33
登録日時: 3年前

Re: msys2でopenCVが使えない

#13

投稿記事 by keito » 3ヶ月前

test.cppは↓のサイトを参考にしています。(コンパイルできるかの確認の為不要な部分はごっそり消してますが)
http://www.wakayama-u.ac.jp/~chen/cmake/cmakecv.html

Makefileはサイト探しても見つからなかったので自作です

keito
記事: 33
登録日時: 3年前

Re: msys2でopenCVが使えない

#14

投稿記事 by keito » 3ヶ月前

test.cppの間違いってことですかね?確認してみます。
image.pngは正直なんでも良かったのでゲームのスクショ画像にしてます。
添付ファイル
image.png

keito
記事: 33
登録日時: 3年前

Re: msys2でopenCVが使えない

#15

投稿記事 by keito » 3ヶ月前

うーん、やはりよく分かりませんでした…
試しにhttp://cvwww.ee.ous.ac.jp/semi/opencv/の1.1サンプルコードや
https://www.buildinsider.net/small/opencv/007の2.1.1サンプルコード
をtest.cppにコピペして試しましたがリンカエラーのままでした。
コンパイラのオプションかPATHの設定が間違っているのでしょうか?

Math

Re: msys2でopenCVが使えない

#16

投稿記事 by Math » 3ヶ月前

*****************
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

Math

Re: msys2でopenCVが使えない

#17

投稿記事 by Math » 3ヶ月前

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

keito
記事: 33
登録日時: 3年前

Re: msys2でopenCVが使えない

#18

投稿記事 by keito » 3ヶ月前

引き続き返信してくださりありがとうございます。

提示された2つのソースコードをコピペし実行しました。
コンパイル・リンカエラーは起きませんでした。
添付ファイル
Capture1.png
Capture2.PNG

Math

Re: msys2でopenCVが使えない

#19

投稿記事 by Math » 3ヶ月前

そうですよね。

keito さんのプログラムが どこで引っかかっているのかがわからないのですよ。

エラーメッセージが不思議なんですね。

OpenCV4のサンプルプログラムを探しているのですが…

( Version 4で大きくかわったみたいですよね! )

***
keitoさんのMakefile はいいようですが 引数などの情報をどうして得たのか教えて頂くとありがたいです。

Math

Re: msys2でopenCVが使えない

#20

投稿記事 by Math » 3ヶ月前

Visual Stdio Code を使っているのですね(^^)/

私も使ってみます。

keito
記事: 33
登録日時: 3年前

Re: msys2でopenCVが使えない

#21

投稿記事 by keito » 3ヶ月前

cv::imreadの引数は
http://opencv.jp/opencv-2.1/cpp/reading ... video.html
を参考にしています。
Mathさんの環境ではimage.pngを読み込んでウィンドウに表示させるプログラムが動くんでしょうか?

最新のリファレンスも確認しましたが、特に仕様の変更も見られず…

一応パッケージのバージョンを下げて(3.x.x)動くかどうかも確認してみます。
また、pkg-configというのがあるらしいのを知ったのでそれも試してみます。

(VS Code、最初は環境設定とかで戸惑いましたが、低スペックなPCでも快適なのでとても重宝してます。好き)

keito
記事: 33
登録日時: 3年前

Re: msys2でopenCVが使えない

#22

投稿記事 by keito » 3ヶ月前

ああ、すみません、Makefileの引数の話でしたね、test.cppにある関数の引数と間違えました。
コンパイラのオプションまで書いてくれてるサイトが無かったので、#includeファイルを見て予測して書きました。

Math

Re: msys2でopenCVが使えない

#23

投稿記事 by Math » 3ヶ月前

> #includeファイルを見て予測して書きました。

了解しました。引き続き 分かったら連絡します。

keito
記事: 33
登録日時: 3年前

Re: msys2でopenCVが使えない

#24

投稿記事 by keito » 3ヶ月前

すみません、自己解決しました!

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(さっき存在知った)使えって事でしょうかね......
添付ファイル
Capture1.png

Math

Re: msys2でopenCVが使えない

#25

投稿記事 by Math » 3ヶ月前

了解。良かったですね!コングラチュレーション!

Math

Re: msys2でopenCVが使えない

#26

投稿記事 by Math » 3ヶ月前

昨年クリスマスに買ったWindows10に msys2

http://www.msys2.org/ を入れてしまったが


https://laboradian.com/win10-msys2/

に ”現在では、Windows 10 に WSL が実装されていますので、特に理由がなければ MSYS2 の代わりに WSL を使う方がよいでしょう”

のような記述があったので以前のPCのように WSL をまた導入してみます。

Math

Re: msys2でopenCVが使えない

#27

投稿記事 by Math » 3ヶ月前

Window10に Windows Subsystem for Linux 、Ubuntu をインストールしてみました。

http://www2.koyoen.birdview.co.jp/~abcx ... -23-c-.PNG

http://www2.koyoen.birdview.co.jp/~abcx ... 23-z2-.PNG

Math

Re: msys2でopenCVが使えない

#28

投稿記事 by Math » 3ヶ月前

http://www2.koyoen.birdview.co.jp/~abcx ... 23-z1-.PNG

zsh
gcc 7.3.0
java
をインストールしてみました。

Math

Re: msys2でopenCVが使えない

#29

投稿記事 by Math » 3ヶ月前

http://www2.koyoen.birdview.co.jp/~abcx ... -23-d-.PNG

Windows10 同様 update( と upgrade)は日日行わなければならないならないようです。

Math

Re: msys2でopenCVが使えない

#30

投稿記事 by Math » 3ヶ月前

http://www2.koyoen.birdview.co.jp/~abcx ... -23-f-.PNG

大型Computer の入力に使用したVim をインストール

数万行になると vi でなくては!

返信

“C言語何でも質問掲示板” へ戻る