• ベストアンサー

openCVの関数の中身を参照することはできますか?

こんにちは.最近opencvをやりだした初心者です. opencvには「canny関数」だとか「2値化関数」だとかありますよね. アルゴリズムが知りたいので,関数の中身を参照したいです. そのような方法はあるのでしょうか? opencvに詳しい方ご教授お願いいたします(u_u)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんにちは. 意味の分からないことを言っている人がいますが… OpenCVは「Open (source) Computer Vision Library」なのですがね. さて,お探しの Canny Edge Detector は 参考リンクのサイトから入手できる OpenCV-2.0.0.tar.bz2 を展開してできたフォルダの OpenCV-2.0.0/src/cv/cvcanny.cpp です. まぁ,何に使うのかは分かりませんが, ソースコード中のコメントに書いてある, ライセンス条項には十分注意してください. 蛇足ですが Canny Detectorは結構難しい考え方に基づくものですよ. 学生の方であれば所属機関の図書館等から論文を入手することも可能でしょうが…

参考URL:
http://sourceforge.net/projects/opencvlibrary/
shige22
質問者

お礼

おお,参照できるのですか!? ちょっと調べてみます。ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

誰も答えていないようでしたので。。 OpenCVの関数の中身が参照出来るかどうかは私には分かりません。 よって、常識的なお話をと。。。 まず、すごく便利な関数やライブラリを作ったとして、そのソースコードがばれてしまうと、別の会社等がコピーして安くライブラリを提供する事が発生します。 よって、ソースコードを公開するような事はしないと思われます。 (オープンソースは別ですが。。。) 無料で提供されているライブラリでも企業の技術力の提示という意味で使用されていると思われますので、こちらでも公開はされていないかと。。。 以上です。 「canny関数」でググッて見ましたが、それに関するアルゴリズム関連のホームページはありそうでした。。。

shige22
質問者

お礼

わかりました。自分が浅はか?だったのかもしれません. ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • opencvの関数の中身をみることができますか?

    opencvの、たとえば「cvAdd」や「cvAbs」などの関数がどういったアルゴリズムで計算しているか知りたのですが、見ることは可能でしょうか? openCVの関数の中身を参照することはできますか? http://okwave.jp/qa/q5365660.html この質問を見た所canny関数は「cvcanny.cpp」で見ることが可能なようですが「cvAdd.cpp」などのファイルがないため、これらの中身を見る方法がわかりません。

  • エッジの角度について

    こんにちは。 私はOpenCVでCannyのエッジ検出をやっています。 Cannyの関数の中身を見ていたのですが、角度の算出方法が分かりません。 エッジの角度を求める方法として、あるサイトでθ=atan(gy/gx)とありましたが、θのとる値の範囲もよくわからず、またCannyの関数の中でもそういった式はまったく出てこず困っています。 エッジの角度を算出する方法をご存知の方、ぜひ教えてください。 よろしくお願いします。

  • OpenCVのライセンスについて

    OpenCVを利用して商用のプログラムをつくろうと考えているのですが, ライセンスはどのような扱いになるのでしょうか? 例えばSIFTなどのアルゴリズムを使うことはできますか? どなたかご教授お願いします.

  • OpenCV1.1、OpenCV2.3の使い方

    これまでOpenCV1.1を使っていたのですが類似画像検索をするのにHOG特徴量を用いたいと思い、HOG特徴量を求める関数のあるOpenCV2.3もインストールしました。 その際、OpenCV1.1はアンインストールして、最初からプログラムを書き換えないとダメなのでしょうか?ためしに今まで書いていたプログラムにOpenCV2.3のライブラリをインクルードしてみると、それだけで100個以上のビルドエラーが発生してしまいました。CとC++の違いによるものなのでしょうか? あとPathの設定などもOpenCV1.1のときのものを残したまま、OpenCV2.3用のPathを追加しただけなのですが、大丈夫なのでしょうか? 解決方法がわかる方がいらっしゃれば、教えて下さい。よろしくお願いいたします。

  • OpenCVで寸法測定

    カメラで撮影した画像から、精度よく物体の寸法を出すアプリケーションを作ろうと思います。 調べたところ、OpenCVというライブラリを使うと可能そうです。 しかし、OpenCVについては、全く初心者です。 OpenCVに詳しい方に質問ですが、たとえば、ドアの画像から、高さサイズを計算したり出来ますか? 出来るのであれば、方法や関数など、簡単に教えて頂きたいです。参考になるHPがあればありがたいです。 また、OpenCV以外でも、良い方法があれば教えでください。よろしくです。

  • openCVのエラー

    openCVの関数で cvCvtColor(frameImage, hsvImage, CV_BGR2HSV); というRGBからHSVへ変換する関数を openGLと組み合わせたプログラムで使用していたところ, コンパイルは通るのですが実行すると Bad number of channels (Incorrect number of channels for this conversion code) in function cvCvtColor. C:\User\VP\opencv\cv\src\cvcolor.cpp(2440) と表示されてエラーとなります. いったい何が原因なのでしょうか?? ちなみに上記関数はopenCVのみのプログラムでは正常に 動作したのを確認しました. また,エラーが出たプログラムでは, glutDisplayFunc(display); glutIdleFunc(idle); //idleの中身はglutPostRedisplay(); としており,このdisplay()関数内にて 上記関数を使用したところこのような現象が起こりました. 分かる方がいらっしゃいましたら,ご回答よろしくお願いいたします.

  • openCVでのNEON最適化

    openCVのNEON対応に関して質問です。 (オープンソースの開発の仕方についての質問になるかもしれませんが。) 最近openCVのNEON対応に興味を持ち始め、 gitリポジトリをcloneしてソースの中身を追っています。 しかし、私の実力不足により具体的にどのような方法で NEONによる最適化を実現しているのか追いきれていません。 まず始めにcloneしてきたディレクトリ以下をARM_NEONやuint8x16_t等の キーワードで検索すると、極々一部の関数(normHamming)等にしか 明示的にNEON化されている箇所が見当たりません。 しかし一方で、http://code.opencv.org/projects/opencv/wikiから 「neon optimization」等のキーワードで検索をかけると、 下記のようにNEON対応された関数がいくつもあるように読み取れます。 http://code.opencv.org/projects/opencv/repository/revisions/42e0214de51394d9d2a2aa293cbda40145a720a9 そこでdiffを眺めるとGET_OPTIMIZED(hoge)というような マクロ経由で最適化対応をしているようです。 しかし、今度はGET_OPTIMIZEDでソースコードに検索をかけると、precomp.cppの中に 以下のような記述が見つかりました。 #ifdef HAVE_TEGRA_OPTIMIZATION #include "opencv2/core/core_tegra.hpp" #else #define GET_OPTIMIZED(func) (func) #endif 一見マクロ側は何もしていないように見えてしまいますが、 これから、どのようにNEON最適化が行われるのでしょうか? 現時点で全く想像が付かないため、何かしらの推測が出来る方が いましたらご教示頂ければ幸いです。 以上、よろしくお願い致します。

  • opencvのシーケンスについて。

    opencvのシーケンスについて。 opencvのシーケンスとは。 opencvを使っていると、よくシーケンスという言葉に遭遇します。本やネットで調べましたが、どんなものなのかがよく分かりません。 メモリストレージ・オブジェクト等と一緒に出てくるのですが、これらもなかなか理解しがたいです… 例えばCvFindCountorという画像内のn個の辺を持つ輪郭を調べるという関数がありますが、これに関する情報が引数として渡したシーケンスに保存されているようだ。というのは何となく感じとったのですが、この中の座標等を引き出すにはどうしたらいいのでしょうか。 どなたか分かりやすくご教授頂けないでしょうか。 また、分かりやすいサイトや本もご存知であれば教えて下さい。

  • openCVについて‥

    openCVでIplImage構造体の変数に格納された画像の座標値(i,j)の画素RBG値を取れだす方法を知れたいのですが、ご存知の方、是非ご教授ください。

  • OpenCVを用いた動画処理

    OpenCVを用いてaviファイルの読み込み、および、書き込みをしようとしているのですが、 指定のaviファイルが見つかりませんでした. というエラー処理の表示しか行われず困っています。 教えていただけませんでしょうか? よろしくお願いします。 読み込もうとしているファイルはデスクトップ上のOpenCVというフォルダのinput.aviというファイルです。 プログラムは以下に残します。 #include "cv.h" #include "cxcore.h" #include "highgui.h" #include <stdio.h> //読み込む動画ファイル名 char* input_filename="input.avi"; //書き込む動画ファイル名 char* output_filename="output.avi"; //IplImage IplImage* src; IplImage* gray; IplImage* canny; int main(){ CvCapture* capture = NULL; int key; //キー入力 // Cannyオペレータのパラメータ------ double low_threshold=50.0; double high_threshold=200.0; int aperture_size=3; //--------------------------------- // ファイル書き込み設定-------------- CvVideoWriter *writer = 0; int isColor = 1; int fps = 30; // フレームレート int frameW = 320; // width int frameH = 240; // hight //----------------------------------- //指定したAVIファイルが見つからない場合は終了 if(NULL==(capture = cvCaptureFromAVI(input_filename))){ fprintf(stderr,"指定のaviファイルが見つかりませんでした."); return -1; } gray = cvCreateImage( cvSize(frameW,frameH), IPL_DEPTH_8U, 1 ); canny = cvCreateImage( cvSize(frameW,frameH), IPL_DEPTH_8U, 1 ); gray->origin = 1; //orginを入力側に合わせる canny->origin = 1; //orginを入力側に合わせる writer=cvCreateVideoWriter(output_filename,-1,fps,cvSize(frameW,frameH),isColor); //画像表示ウィンドウの準備 cvNamedWindow("Edge Image", CV_WINDOW_AUTOSIZE); //画像表示ウィンドウの出現位置指定 cvMoveWindow("Edge Image", 50, 50); //処理ループの開始 for(;;){ //AVIファイルからフレーム画像を取り出す if(NULL==(src=cvQueryFrame(capture))){ break; } //グレースケールに変換 cvCvtColor(src, gray, CV_BGR2GRAY); //Cannyオペレータによるエッジ検出 cvCanny(gray, canny, low_threshold, high_threshold, aperture_size); //フレーム書き込み cvWriteFrame(writer,canny); //画像表示 cvShowImage("Edge Image", canny); //キー入力 key = cvWaitKey(20); //ESCキーを押すと終了 if(key==0x1b) break; } //解放 cvReleaseVideoWriter(&writer); cvReleaseCapture(&capture); cvReleaseImage(&src); cvReleaseImage(&gray); cvReleaseImage(&canny); cvDestroyWindow("Edge Image"); return 0; } 以上です。 よろしくおねがいします。