質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

2814閲覧

c++ opencvでエラーが出ます。

PINE1103

総合スコア20

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/09/22 07:27

g++ -o test hahu.cpp $(pkg-config --cflags --libs opencv4)
でコンパイルしたところ下のようなエラーがでました。調べたのですが解決法がわかりません。
わかる方がいましたら教えていただきたいです。

コードも下にあります。
brewでopencvをインストール済みです。

c++

1#include <iostream> 2#include <opencv2/highgui/highgui.hpp> 3#include <opencv2/imgproc.hpp> 4 5#pragma comment( lib, "opencv_world300d.lib" ) 6 7int main(int argc, const char* argv[]) 8{ 9 int hr = -1; 10 11 try 12 { 13 cv::Mat src, edge, dst; 14 std::vector<cv::Vec4i> lines; 15 16 // 画像読み込み 17 src = cv::imread("D:/TEMP/MaverickProj/Image/OpenCV/45/building.jpg", cv::IMREAD_GRAYSCALE); 18 19 cv::namedWindow("src", 1); 20 imshow("src", src); 21 22 // 輪郭抽出 23 cv::Canny(src, edge, 50, 200, 3); 24 25 // 画像領域確保 26 dst = cv::Mat::zeros(src.rows, src.cols, CV_8UC3); 27 28 // src[0] -> dst[2], src[0] -> dst[1], src[0] -> dst[0] 29 // て感じでコピー元インデックスとコピー先インデックスを指定する 30 int fromTo[] = { 0, 2, 0, 1, 0, 0 }; 31 32 // シングルチャンネルを3チャンネルに増やして、コピーする 33 cv::mixChannels(&src, 1, &dst, 1, fromTo, 3); 34 35 // 線分検出 36 cv::HoughLinesP( 37 edge, // 8ビット,シングルチャンネルの2値入力画像.この画像は関数により書き換えられる可能性があり. 38 lines, // 検出された線分が出力されるベクトル 39 1, // ピクセル単位での距離分解能. 40 CV_PI / 180.0, // ラジアン単位での角度分解能 41 80, // 閾値.thresholdを十分に超えている直線のみが出力対象. 42 30, // 最小の線分長 43 10 // 2点が同一線分上にあると見なす場合に許容される最大距離 44 ); 45 46 // 線分描画 47 for (auto line : lines) 48 { 49 cv::line(dst, cv::Point(line[0], line[1]), cv::Point(line[2], line[3]), cv::Scalar(0, 0, 255), 1); 50 } 51 52 cv::namedWindow("dst", 1); 53 cv::imshow("dst", dst); 54 55 cv::waitKey(0); 56 57 hr = 0; 58 } 59 60 catch (cv::Exception ex) 61 { 62 std::cout << ex.err << std::endl; 63 } 64 65 // ウィンドウの破棄 66 cv::destroyAllWindows(); 67 68 return hr; 69}
Undefined symbols for architecture x86_64: "__ZN2cv11namedWindowERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi", referenced from: _main in ccLV9OlL.o "__ZN2cv6imreadERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi", referenced from: _main in ccLV9OlL.o "__ZN2cv6imshowERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11_InputArrayE", referenced from: _main in ccLV9OlL.o ld: symbol(s) not found for architecture x86_64 collect2: error: ld returned 1 exit status

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki23

2020/09/23 02:52

pkg-config --cflags --libs opencv4 を単独で実行するとどのように出力されますか?
PINE1103

2020/09/23 05:05

pkg-config --cflags --libs opencv4 -I/usr/local/Cellar/opencv/4.4.0_2/include/opencv4 -L/usr/local/Cellar/opencv/4.4.0_2/lib -lopencv_gapi -lopencv_stitching -lopencv_alphamat -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_highgui -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform -lopencv_line_descriptor -lopencv_quality -lopencv_rapid -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_sfm -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_videostab -lopencv_videoio -lopencv_viz -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core と出力されます
PINE1103

2020/09/23 05:07

opencvは/usr/local/binにインストールされています。
yuki23

2020/09/23 11:02

OpenCV の他のバージョンをインストールしたり自分でビルドしたりしてませんか?
PINE1103

2020/09/23 12:50

他のバージョンをインストールしたと思います。 opencv-pythonなどインストールしましたが全ては覚えておりません。 どのように確認すれば良いでしょうか
guest

回答2

0

自己解決

昔自分が標準のclangからgccに変更したために起きたエラーでした。
/usr/local/binにあるgccのg++が優先して作動していたためこのシンボリックリンクを解消して、/usr/binにある標準のclangのg++が優先されるようにしてコンパイルしたところ無事プログラミングが作動いたしました。opencv4とg++(gcc)のバグが原因であったと思われます。
コンパイルは  g++ hahu.cpp -std=c++11 pkg-config --cflags --libs opencv4 -o sample
で行いました。

投稿2020/09/25 15:04

PINE1103

総合スコア20

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

現象としては、異なるバージョンのOpenCVのライブラリをリンクしようとしているために発生したエラーのように見えます。
とりあえず、思い当たるものをすべてアンインストールして再インストールしてみてください。
Macは持っていないので、探し方はちょっとわかりません。

投稿2020/09/23 14:19

yuki23

総合スコア1448

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PINE1103

2020/09/25 15:03

丁寧な回答ありがとうございます。他のopencvをアンインストールしてopencvを再びインストールしてもエラーが解消されなかったため、色々試してみたところ、 昔自分が標準のclangからgccに変更したために起きたエラーでした。 /usr/local/binにあるgccのg++が優先して作動していたためこのシンボリックリンクを解消して、/usr/binにある標準のclangのg++が優先されるようにしてコンパイルしたところ無事プログラミングが作動いたしました。opencv4とg++(gcc)のバグが原因であったと思われます。 コンパイルは  g++ hahu.cpp -std=c++11 `pkg-config --cflags --libs opencv4` -o sample で行いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問