0
私は最初にcanny detectorを使用して2値画像からエッジを抽出します。結果は完璧ですが、ハフ変換を使用してこれらのエッジをベクトル化しました。しかし、私が得たラインは、存在しない水平線の大部分がどこからも飛び出さないという誤ったものです。OpenCV Hough Line Transformは存在しない水平線を与えます
コードとパラメータが、私はいくつかの苦労の後
// detect edges.
cv::Mat1b edges(bw.size());
cv::Canny(bw, edges, 40, 120);
// detect lines.
std::vector<cv::Vec4i> lines;
cv::HoughLinesP(edges, lines, 1, CV_PI/180, 0);
// minimum 100 votes version.
cv::HoughLinesP(edges, lines, 1, CV_PI/180, 100);
cv::Mat1b tmp(edges.size());
for (unsigned i = 0; i < lines.size(); i ++) {
cv::Vec4i const& line = lines[i];
cv::line(tmp, cv::Point(line[0], line[1]), cv::Point(line[2], line[3]), cv::Scalar(255));
}
なぜあなたの閾値を0?ハフ変換について考えられる方法の1つは、画像を線で塗りつぶしてから、その線上に置かれた画像内のすべての白い画素に対して、その線にその点数+1を与えることです。 「スレッショルド」では、「ラインとして数えるには、どれくらいのポイントでタッチする必要がありますか」と尋ねています。だからあなたのしきい値が0であれば、ハフからのすべての可能なラインがあなたのイメージにあります。代わりに、50や100などを試してみてください。これは実際にハフ変換がどのように動作するかではなく、かなり近いです。 –
私は参照してください。その後、投票数を呼び出す必要があります。しきい値を100,300、および500に設定すると、水平線は固定されますが、良好な線は消えます。これらの画像を含めるように投稿を編集します。 – Davis
ああ。いいえ、あなたは別の変わった問題を抱えています。最近、非常に類似した質問があったが、 'lines 'には何百万もの行があった。また、各行の値は完全に奇妙で大規模な数値でした。あなたも同様ですか?それは本当に奇妙なバグに見えます。 [ここ](https://stackoverflow.com/questions/44661140/opencv-3-2-0-houghlinesp-returns-out-of-bounds-lines-c)を参照してください。また、[こちら](https://stackoverflow.com/questions/43645923/opencv-houghline-function-create-unlimited-lines)に投稿された回答があります。 –