2012-02-21 61 views
2

をとyを返します。その特定の部分からの水平線の位置。これを達成するために、私はOpenCVライブラリを使用しています。 CV :: HoughLinesはで失敗「OpenCVのエラー:アサーションに失敗しました。」私はキャニーエッジ検出とハフ画像に変換ん(ARCを使用して)iOS用アプリの作成プロセスにいるよ

キャニーエッジ検出

を行うのは十分に簡単だったが、厄介なエラー「アサーションが失敗した」で cv::HoughLines方法は、毎回失敗します。ここで私がしようとしてるかのコードスニペットです:

cv::cvtColor(myImage, inputImage, cv::COLOR_RGB2GRAY); 

cv::Canny(inputImage, outputImage, 200, 600); 

cv::Vec2f lines; // short for 'Vec<float, 2>' 
cv::HoughLines(outputImage, lines, 1, CV_PI/180, 100); 

を最初は、私はVec2fが正しかったかどうかわからなかったので、私はまた、代わりにcv::Matとしてlinesを定義しようとした...しかし、その後、cv::HoughLinesすべてのデータを返すことはありません。少なくともチェックしないでください。cv::countNonZero(lines)

iOSとObjective-C(そしてCベースのコード化のバックグラウンドが比較的新しい)から、訂正やヒントをいただければ幸いです。

+0

自分を助け、完全なエラーMSGを貼り付けます。私は '行' のVec2fを使用して取得し、完全な誤り@karlphillip – karlphillip

+0

が 'OpenCVのエラーです:アサーションが失敗した(K == STD_VECTOR_MAT)のリリースでは、ファイル/ユーザ/ロビン/プロジェクト/ OpenCVForiPhone/OpenCVの/ OpenCVの/モジュール/コア/ SRC /matrix.cppは、ライン1369' – RobW

答えて

3

The docsはかなり明確にこのことについて、次のとおりです。

void HoughLines(Mat& image, vector<Vec2f>& lines, double rho, double theta, int threshold, double srn=0, double stn=0) 

言った、あなたはstd::vector<cv::Vec2f>にパラメータの型を変更する必要があります。

std::vector<cv::Vec2f> lines; 
cv::HoughLines(outputImage, lines, 1, CV_PI/180, 100); 

あなたは、それ以上の問題は、例を探すためにしようとした場合FiducialDetectorのようにこの関数を使用します。

+1

どうもありがとうございました@karlphillipは、それがエラーを取り除く持っています!それは今かなり明白ようだが、私は 'のstdを使用するために必要な理解していませんでした::' ...私はOOPに使用ではなくC++ – RobW

+1

感謝しています!私の問題は 'cv :: Vec2f'の代わりに' cv :: vector'を使うことでした! – kelin

関連する問題