こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

回答受付中の質問

OpenCV

いつもお世話になっております。
添付の2値画像からハフ関数で直線抽出したいのですが、うまく行かず困っています。
エラーは表示されず、ただグレー 一色の出力です。
閾値、投票数、最小長さ、など値をいろいろ変えてみたのですがうまくいきません。
どなたか原因がおわかりであればぜひ教えてください。
よろしくお願い致します。
'==================================================
’void Sample(char *FilePath){
int i;
float *line, rho, theta;
double a, b, x0, y0;
IplImage *src_img_std = 0, *src_img_prob = 0, *src_img_gray = 0;
CvMemStorage *storage;
CvSeq *lines = 0;
CvPoint *point, pt1, pt2;
src_img_gray = cvLoadImage(FilePath, CV_LOAD_IMAGE_GRAYSCALE);
storage = cvCreateMemStorage(0);

// (3)標準的ハフ変換による線の検出と検出した線の描画
lines = cvHoughLines2(src_img_gray, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI / 180, 1, 1, 0);
for (i = 0; i <lines->total; i++) {
line = (float *)cvGetSeqElem(lines, i);
rho = line[0];
theta = line[1];
a = cos(theta);
b = sin(theta);
x0 = a * rho;
y0 = b * rho;
pt1.x = cvRound(x0 + 1000 * (-b));
pt1.y = cvRound(y0 + 1000 * (a));
pt2.x = cvRound(x0 - 1000 * (-b));
pt2.y = cvRound(y0 - 1000 * (a));
cvLine(src_img_std, pt1, pt2, CV_RGB(255, 0, 0), 3, 8, 0);
}
cvNamedWindow("Hough_line_standard", CV_WINDOW_AUTOSIZE);
cvShowImage("Hough_line_standard", src_img_std);
cvWaitKey(0);
cvDestroyWindow("Hough_line_standard");

投稿日時 - 2017-06-19 23:50:44

QNo.9343073

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

rosafilipes さん

2つ問題があります。

1つ目は、「標準的ハフ変換による線の検出と検出した線の描画」とコメントに書かれているのに、 CV_HOUGH_PROBABILISTIC が指定されていることです。
ちゃんと CV_HOUGH_STANDARD を指定してください。

2つ目は、こちらがより根本的な問題ですが、 src_img_std が初期化されていないために、何も描画されないし、ウィンドウにも何も表示されません。
例えば、 cvLoadImage の下の行に以下の2行を入れてみてください。
src_img_std = cvCreateImage(cvGetSize(src_img_gray), 8, 3);
cvSetZero(src_img_std);

1つ目の問題は、2つ目の問題が解決できなくて、当てずっぽうでごちゃごちゃとやってみた結果発生したのではないかと思いますが、プログラムというものは当てずっぽうで上手く動くことは決してありません。
おそらく将来的にはもっと高度な画像処理をしたいのだと思いますが、まともなプログラミング手法を覚えないと先には進めないでしょう。

投稿日時 - 2017-06-23 22:53:13