0

その別のOpenCVの質問。私はこれが大好きですが、それはあなたを真剣に狂わせる可能性があります.

問題: 私は、iPhone 用の iOS で、はい、OpenCV を使用してプロジェクトに取り組んでいます。フレームワークが悪いのか、それとも何なのかわかりません。

これは機能します:

cv::Canney()
cv::adaptiveThreshold()

でも、やってみると

"cvGet2D()" (without previous "cv::")  

「cvGet2D」の呼び出しに一致する関数がありませんというエラーが表示されます

「cvGet2D()」と入力すると、コードヒントに表示され、ヘッダーを見つけるのが最も少ないことを示唆していますか? 「cv::get2D」または「cv::cvGet2D」と入力しようとしても、何も表示されません。インストールした OpenCV フレームワークがまだ理解できないブラックボックスのように感じられてイライラしています。

具体的には、適切なライブラリの開発とそうでないこと、およびリンクに関係があると思いますか? そこに物を捨てるだけです。

皆様、どうもありがとうございました。私は本当に感謝しており、いくらかお返しできるほど賢くなるまで待ちきれません.

編集:

だから、明確にするための最新の試み。

 cv::cvGet2D(results,0,0);  

新しいエラー: 「名前空間 'cv' に "cvGet2D" という名前のメンバーがありません。

ここに何かアイデアはありますか?

その他の編集:

回答ありがとうございます... 4 時間後、コーヒーを数杯飲みましたが、まだ困惑しています。名前空間を台無しにしている場合、cv::adaptiveThreshold のようなものが機能するのに cv::get2D が表示されないのはなぜですか? 深刻な脳出血を引き起こしています。

したがって、このソリューションの C または C++ バージョンのいずれかを使用する必要があるようです。あらゆるヒントが提案されます。インターフェイスにあることを追加します: #import <OpenCV/opencv2/opencv.hpp>. 次に、cvGet2D の構造を確認できるコア ライブラリをインポートします。再度、感謝します。

進捗!!

これらは私の新しい考えです。

cv::Mat tempMat = [self.imageView.image CVMat];
cv::Mat testMat = tempMat(cv::Rect(0,0,2591, 1)); 
cv::Mat templateMat = tempMat(cv::Rect(0,0,100,1));  

cv::Mat results; 


cv::matchTemplate(testMat, templateMat, results, CV_TM_CCOEFF_NORMED); 

typedef Vec<float, 2> Vec2f;

Vec2f& elem = results.at<Vec2f>( 0 , 35 );

float value1 = elem[0]; 
float value2 = elem[1]; 

では、おそらく .at を使用する必要がありますか? 正接?かもしれませんが、何かをしているようです。新しい質問です。wtf は matchTemplate を出力しますか? その 1 行、この場合は 2492 列です。私の質問は、(0,35) の値は複数の数値であるべきですか? elem[0] と elem[1] は何を表していますか? お分かりかもしれませんが、私は単純に写真から 1 行を取り出し、その小さなチャンクをテンプレートとして使用しています。写真には縦線が含まれているので、線同士の距離を特定したいと考えています。はい、複雑です。しかし、この議論の目的のために、実際には 1 つの行だけが必要であり、一連の列は正しいシフトとして各比較の相関係数を出力しますか?

男、仲間、若者、お嬢様、そしてすべての賢い大衆に感謝します!

4

3 に答える 3

1

おそらくOpenCV2.0のC++APIを使用しています。

関数はcv名前空間に移動されました。

それらを前に使用するか、使用するファイルの先頭にcv::追加するだけで使用できます。using namespace cv;

参照:http ://www.aishack.in/2010/07/opencvs-c-interface/

編集:

また、すべて大文字が正しいことを確認してください。

cv::cvGet2D(img,i,j)または(名前空間を含める場合)を使用する場合はコンパイルする必要がありますcvGet2D(img,i,j)

于 2012-06-05T20:40:42.457 に答える
1

まず、そんなことはありませんcv::cvGet2D()

名前cvGet2D()はOpenCVのCインターフェースに属することを示していますが、C++インターフェースを使用しているようです。混ぜちゃダメだよ。参考までに、この関数は opencv_core ライブラリで利用できます。

エラーメッセージは、宣言したヘッダーでこの関数が見つからなかったことを示しているため、正しいヘッダーが欠落しているようです。してみてください#include <cv.h>

編集:

質問に関する最新の更新によりcv::get2D() . 名前空間を配置しようとするのはやめてcvGet2D()ください。これは C インターフェースの関数であり、C 言語には名前空間がありません。

于 2012-06-05T22:48:11.607 に答える
0

Mat_class を使用するのはどうですか? マットからキャスト可能。

Mat_<Vec3b>& M_ = (Mat_<Vec3b>&)M;
for(int i = 0; i < M_.rows; i++)
    for(int j = 0; j < M_.cols; j++)
        M_(i,j) = cv::Vec3b(0,255,0); // Fill Green

こちらもご覧ください

http://docs.opencv.org/modules/core/doc/basic_structures.html#id7

于 2013-03-24T05:15:54.020 に答える