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

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

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

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

C++

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

Q&A

解決済

1回答

806閲覧

Eclipse3.8にてC++でOpenCVを使いたい

LisaXXXX

総合スコア11

OpenCV

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

C++

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

0グッド

0クリップ

投稿2018/06/01 07:39

Eclipse3.8にてC++でOpenCVを使いたいです。
画像の表示はできたのですが、
グレースケール化→2値化処理
ができません。
Eclipseの設定が間違っているのか、使えない関数が多く、困っています。
よろしくお願いいたします。

#include <iostream>
#include <cv.h>
#include <highgui.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "opencv2/opencv.hpp"
using namespace std;

int main() {

cv::Mat input_img = cv::imread("/home/LisaXXXX/デスクトップ/test5/0.jpg"); cv::Mat gray_img; cv::Mat bin_img; cv::threshold(gray_img, bin_img, 0, 255, THRESH_BINARY|THRESH_OTSU); cv::cvtColor(input_img, gray_img, CV_BGR2GRAY); imshow("gray", gray_img); imshow("binary", bin_img) cv::waitKey(0); return 0;

}

エラーコード
make all
Building file: ../src/test.cpp
Invoking: GCC C++ Compiler
g++ -I/usr/local/include/opencv2 -I/usr/local/include/opencv -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/test.d" -MT"src/test.d" -o "src/test.o" "../src/test.cpp"
../src/test.cpp: In function ‘int main()’:
../src/test.cpp:57:43: error: ‘THRESH_BINARY’ was not declared in this scope
cv::threshold(gray_img, bin_img, 0, 255, THRESH_BINARY|THRESH_OTSU);
^
../src/test.cpp:57:43: note: suggested alternative:
In file included from /usr/local/include/opencv2/opencv.hpp:47:0,
from ../src/test.cpp:14:
/usr/local/include/opencv2/imgproc.hpp:311:5: note: ‘THRESH_BINARY’
THRESH_BINARY = 0, //!< \f[\texttt{dst} (x,y) = \fork{\texttt{maxval}}{if (\texttt{src}(x,y) > \texttt{thresh})}{0}{otherwise}\f]
^
../src/test.cpp:57:57: error: ‘THRESH_OTSU’ was not declared in this scope
cv::threshold(gray_img, bin_img, 0, 255, THRESH_BINARY|THRESH_OTSU);
^
../src/test.cpp:57:57: note: suggested alternative:
In file included from /usr/local/include/opencv2/opencv.hpp:47:0,
from ../src/test.cpp:14:
/usr/local/include/opencv2/imgproc.hpp:317:5: note: ‘THRESH_OTSU’
THRESH_OTSU = 8, //!< flag, use Otsu algorithm to choose the optimal threshold value
^
src/subdir.mk:18: ターゲット 'src/test.o' のレシピで失敗しました
make: *** [src/test.o] エラー 1

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

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

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

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

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

guest

回答1

0

ベストアンサー

error: ‘THRESH_BINARY’ was not declared in this scope

これも先ほどと同じです。

定数についても cv::THRESH_BINARY と名前空間を指定しなければいけません。

おそらくインターネットの例では、using namespace cv; を宣言していることが多いため、名前空間を明示していないことが多いのでしょう。
なので、逆に、全部cv::を取っ払って、using namespace してしまうのも手です。

投稿2018/06/01 07:45

kazto

総合スコア7196

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

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

LisaXXXX

2018/06/01 08:01

度々、ありがとうございます。 名前空間を付け忘れていました。。。 using namespaceに変更しました。 THRESH_BINARYでエラーは出なくなりましたが、それでもビルドは通りません。。。 make all Building file: ../src/test.cpp Invoking: GCC C++ Compiler g++ -I/usr/local/include/opencv2 -I/usr/local/include/opencv -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/test.d" -MT"src/test.d" -o "src/test.o" "../src/test.cpp" Finished building: ../src/test.cpp Building target: test Invoking: GCC C++ Linker g++ -L/usr/local/lib -o "test" ./src/test.o -lopencv_core -lopencv_imgcodecs -lopencv_highgui /usr/bin/ld: ./src/test.o: シンボル '_ZN2cv9thresholdERKNS_11_InputArrayERKNS_12_OutputArrayEddi' への未定義参照です //usr/local/lib/libopencv_imgproc.so.3.1: error adding symbols: DSO missing from command line makefile:45: ターゲット 'test' のレシピで失敗しました collect2: error: ld returned 1 exit status make: *** [test] エラー 1 インクルードが不足しているとかでしょうか。。。?
kazto

2018/06/01 08:08

リンクの指定が不足しているようですね。 -lopencv_imgproc を足せば行けそうです。
LisaXXXX

2018/06/01 08:25

ググッてみましたが、リンクの指定方法がわかりません; 度々、失礼いたします・・・;
kazto

2018/06/01 08:29

Eclipseのプロジェクトの設定のどこかに、ライブラリのリンクを指定する箇所があるはずです。 (すみません、普段Eclipseは使っていないので具体的にどこ、とは言えません。) http://coffeegkgk.hatenablog.com/entry/2015/05/23/174751 あたり参考になりますでしょうか。
LisaXXXX

2018/06/01 08:33

ありがとうございます。 opencv_imgprocをライブラリに追加したら、ビルドは通りました。 実行すると、 OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /home/kajiyar58/opencv-3.1.0/modules/highgui/src/window.cpp, line 281 terminate called after throwing an instance of 'cv::Exception' what(): /home/LisaXXXX/opencv-3.1.0/modules/highgui/src/window.cpp:281: error: (-215) size.width>0 && size.height>0 in function imshow とエラーが返ってきましたが、これは別の問題な気がします・・・。
kazto

2018/06/01 08:37

> error: (-215) size.width>0 && size.height>0 in function imshow そうですね、別の問題です。 画像の読み込みに失敗しているようです。 「デスクトップ」など日本語が含まれるパスにモノを置くと、文字コードがあーだこーだうるさいため、ローマ字だけで形成される場所に移動してみてはいかがでしょう。
LisaXXXX

2018/06/01 08:39

ありがとうございます。 たしかにファイルの場所が良くないですね・・・ ちなみに、ソースコードを見なおしたところ、グレースケール前に2値化関数を書いてしまっていて、そのためのバグだったようです・・・ お手数をおかけいたしました。。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問