前提・実現したいこと
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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/12 02:58