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

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

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

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1201閲覧

別のクラスで宣言している定数がロードされません

oka_99

総合スコア11

OpenCV

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/04/12 02:31

前提・実現したいこと

OpenCV/Java/Eclipseを使って画像マッチングのコードを書いています。
画像マッチングのクラスに渡すパラメータについて
別のクラスで宣言している定数がプログラムにロードされません。

以下に掲載しているプログラム自体は長いのですが
前半は画像マッチング用データの取得部分でここは問題はないと思います。
//特徴点の対応を調べる
のコメント行からが問題点です。

BFMatcher matcher = new BFMatcher(NORM_HAMMING,true); //対応を調べるクラス
のパラメータNORM_HAMMINGが
"NORM_HAMMINGが定義していない"とのエラーがでています。

opencvのNORM_HAMMINGの以下ドキュメントをみると
リンク内容

Static variable in class org.opencv.core.Core
とのことなのですが、このプログラム先頭でorg.opencv.core.Core
は宣言済みです。

なぜNORM_HAMMINGの定義がプログラムにロードできないのでしょうか。。。
よろしくお願いいたします。

発生している問題・エラーメッセージ

問題の行に
”NORM_HAMMINGを変数に解決できません”
が表示されます。

該当のソースコード

package opencv_test1; import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.MatOfDMatch; import org.opencv.core.MatOfKeyPoint; import org.opencv.features2d.BFMatcher; import org.opencv.features2d.Features2d; import org.opencv.features2d.ORB; import org.opencv.imgcodecs.Imgcodecs; //-------------------------------------------------------------- //画像処理 特徴点の抽出 //-------------------------------------------------------------- public class ImgConv{ public static void main(String[] args) { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); Mat im_src1; //元画像1(グレイスケール) Mat im_src2; //元画像2(グレイスケール) MatOfKeyPoint my_keypoints1; //特徴点の位置やパラメータを保存する変数 MatOfKeyPoint my_keypoints2; //特徴点の位置やパラメータを保存する変数 Mat my_descriptors1; //特徴量 Mat my_descriptors2; //特徴量 ORB my_orb; //特徴点抽出クラス my_orb = ORB.create(); //1枚目の画像から特徴点を抽出 im_src1 = Imgcodecs.imread("C:\WORK\20180411\img_grayscale\DSC_0021.jpg"); //作業ファイルの読み込み my_keypoints1 = new MatOfKeyPoint(); my_descriptors1 = new Mat(); my_orb.detect(im_src1, my_keypoints1); // 特徴点抽出処理 my_orb.compute(im_src1, my_keypoints1, my_descriptors1); Features2d.drawKeypoints(im_src1, my_keypoints1,my_descriptors1 ); //画像への特徴点の書き込み //2枚目の画像から特徴点を抽出 im_src2 = Imgcodecs.imread("C:\WORK\20180411\img_grayscale\DSC_0022.jpg"); //作業ファイルの読み込み my_keypoints2 = new MatOfKeyPoint(); my_descriptors2 = new Mat(); my_orb.detect(im_src2, my_keypoints2); // 特徴点抽出処理 my_orb.compute(im_src2, my_keypoints2, my_descriptors2); Features2d.drawKeypoints(im_src2, my_keypoints2,my_descriptors2 ); //画像への特徴点の書き込み //特徴点の対応を調べる BFMatcher matcher = new BFMatcher(NORM_HAMMING,true); //対応を調べるクラス MatOfDMatch result_matches = new MatOfDMatch(); //調査結果保存用行列 Mat outImg = new Mat(); //結果画像 //調査 matcher.match(my_descriptors1, my_descriptors2, result_matches); //新規画像を作成し結果をファイルに書き込み Features2d.drawMatches(my_descriptors1, my_keypoints1, my_descriptors2, my_keypoints2, result_matches, outImg);//結果をデータ化 Imgcodecs.imwrite("C:\WORK\20180411\find_feature_points\result.jpg", outImg); //書き込み //後処理 im_src1.release(); im_src2.release(); }

試したこと

メソッドを
BFMatcher matcher2 = new BFMatcher();
に変更したところ、エラーは消えたので書式に問題はなさそうです。

補足情報(FW/ツールのバージョンなど)

OpenCV 3.4.1
java verssion10
eclipse oxygen2 4.7.2

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

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

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

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

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

guest

回答1

0

ベストアンサー

main1行目で書いている

java

1System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

のように、Core.を付ける必要があります。
最初の宣言(import宣言)で省略できるのはパッケージ名だけで、クラス名までは省略できません。
クラス名を省略したいなら、import staticにする必要があります。

java

1import static org.opencv.core.Core.*;

投稿2018/04/12 02:43

swordone

総合スコア20651

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

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

oka_99

2018/04/12 02:58

ありがとうございます! そうでした、先頭の宣言はパッケージがロードされることで クラスがロードしてるのではなかったのですね。、、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問