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

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

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

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

OpenCV

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

ビルド

ソースコードを単体で実行可能なソフトウェアへ変換する過程をビルド(build)と呼びます

Q&A

0回答

1478閲覧

編集したソースコードからビルドしても編集部分が結果に反映されない

deb

総合スコア17

CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

OpenCV

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

ビルド

ソースコードを単体で実行可能なソフトウェアへ変換する過程をビルド(build)と呼びます

0グッド

2クリップ

投稿2019/02/19 10:56

前提・実現したいこと

pythonでSIFT特徴量抽出をしたい。
SIFTはopenCVの追加パッケージopencv_contribの中に配布されている。
今回の目的は、SIFTの中身を弄りたい、ということ。
つまり、C++で記述されているsift.cppを編集して、その編集したソースコードをビルドしてpythonから呼び出して使えるようにしたい。

発生している問題

sift.cppの中身を弄ったのに、出力結果が何も変わりません(編集ソースコードが反映されていない)。
基本的にはこのサイトに従ってソースコードからビルドを行いました。
手順5でソースコードのダウンロードを行います。

cd C:\tools git clone https://github.com/opencv/opencv.git git clone https://github.com/opencv/opencv_contrib.git

手順9でCMakeを実行します。

cd opencv rmdir /s /q build mkdir build cd build del CMakeCache.txt "C:\Program Files\Cmake\bin\cmake" -G "Visual Studio 15 2017 Win64" -T host=x64 ^ -DCMAKE_BUILD_TYPE=RELEASE ^ -DOPENCV_EXTRA_MODULES_PATH=C:\tools\opencv_contrib\modules ^ -DINSTALL_C_EXAMPLES=ON ^ -DWITH_PYTHON=ON ^ -DINSTALL_PYTHON_EXAMPLES=ON ^ -DBUILD_opencv_python3=ON ^ -DPYTHON3_EXECUTABLE=C:/ProgramData/Anaconda3/python.exe ^ -DPYTHON3_INCLUDE_DIR=C:/ProgramData/Anaconda3/include ^ -DPYTHON3_LIBRARY=C:/ProgramData/Anaconda3/libs/python36.lib ^ -DPYTHON3_NUMPY_INCLUDE_DIRS=C:/ProgramData/Anaconda3/lib/site-packages/numpy/core/include ^ -DBUILD_EXAMPLES=ON ^ -DOPENCV_ENABLE_NONFREE=ON ^ ..

私はこの手順9(CMakeの実行)の手前で、今回の目的であるsift.cppを編集しました。
その後は、手順11に従いソースコードからビルドしました。

"C:\Program Files\Cmake\bin\cmake" --build . --config RELEASE --target INSTALL

該当のソースコード

SIFT特徴量抽出プログラムとしては、こちらのよくあるpythonプログラムを用いたのですが、出力される画像は普通のsift.cppを用いたときと何の変化もありませんでした。

python

1import numpy as np 2import cv2 3img1 = cv2.imread('test3.png',0) 4img2 = cv2.imread('test3_rot.png',0) 5#特徴抽出機の生成 6detector = cv2.xfeatures2d.SIFT_create() 7#kpは特徴的な点の位置 destは特徴を現すベクトル 8kp1, des1 = detector.detectAndCompute(img1, None) 9kp2, des2 = detector.detectAndCompute(img2, None) 10#特徴点の比較機 11bf = cv2.BFMatcher() 12matches = bf.knnMatch(des1,des2, k=2) 13#割合試験を適用 14good = [] 15match_param = 0.6 16for m,n in matches: 17 if m.distance < match_param*n.distance: 18 good.append([m]) 19#cv2.drawMatchesKnnは適合している点を結ぶ画像を生成する 20img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good, None,flags=2) 21cv2.imwrite("sift_result.png", img3)

問題点は?

結局のところ、何が問題なのか分かりません。
そもそも既存のOpenCVのソースコードをわざわざ編集してビルドする人は少ないと思うのですが、今回の発想自体は正しいのでしょうか?
正しいとしたら、どうして編集したコードは反映されないのでしょうか。

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

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

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

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

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

Q71

2019/02/19 12:09 編集

OSは?ビルドしてできたファイルを Python のライブラリ ディレクトリへ放り込まなければなりませんが、それをしていない、とか言うのではなく? おっと、Windows か。単純に print 文を入れるとか、新しい関数を追加するとかして、狙ったところに INSTALL されているか、確認しましたか?
pepperleaf

2019/02/19 12:08

ビルドした結果が、Pythonが参照しているファイルに反映しているのでしょうか?
Stan_Dma

2019/02/19 12:43

Your reference site seems to be wrong. Why did they use backslash (yen mark) specified in "-DOPENCV_EXTRA_MODULES_PATH=C:\tools\opencv_contrib\modules"? How about replacing backslash to slash?
deb

2019/02/19 12:53

反映されているか確認する方法を考えていたのですが、"import cv2"で読み込むソースコードがどれなのか、"cv2"として読まれているmain関数?のようなソースコードがどれなのか分からなくて苦戦中です。"import cv2"をすると自動的にprint文を吐くようにするにはどのソースコードを書き換えればいいか分かりますか?
deb

2019/02/19 12:55

はじめは、"import cv2"、"cv2.__version__"でOpenCVのバージョンを返すので、versionを返すソースコードを探していたのですが、これもまた見つけられずに困っていました。
deb

2019/02/19 13:01

I guess so. They say that you should not use "\" but "/" in order to avoid error under "opencv_contrib", so maybe they missed. Thanks.
deb

2019/02/19 15:12

I changed "\" to "/" but it didn't matter of the original problem.
Stan_Dma

2019/02/20 06:08 編集

You might have used the ready-to-made modules at this time that installed when using pip or something. You have to change the library to search if you would like to use one you built. May be there in your path, 'C:\tools\opencv_contrib\modules\install' or else (Im not sure the default directory to be installed if not given -DCMAKE_INSTALL_PREFIX option). This is that you may use.
firedfly

2019/02/21 00:01

「OpenCVのソースコードを編集してビルドする人」は多くなさそうですが Raspberry Pi向けなどビルド済みのバイナリが用意されていない場合に 「OpenCVのソースコードをビルドする人」はけっこういます。 今回はソースコードをビルドしてインストールする手順に抜けがあるだけなので、 あまり難しく考えずひとつずつ確認していくといいでしょう。 (インストール後にPythonから参照しているバイナリの日付が新しくなっているか、など)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問