0
我首先使用Canny檢測器從二值圖像中提取邊緣。結果是完美的,但後來我用hough變換來矢量化這些邊緣。然而,我得到的線是錯誤的,大量不存在的水平線只是無處不在。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?你可以考慮Hough變換的一種方式是它用線條填充圖像,然後對圖像中的每個白色像素放置該行,將該行+1賦予其分數。有了「閾值」,你就會問「一條線有多少點可以讓我把它算作一條線?」所以如果你的門檻值爲0,那就意味着......來自霍夫的每條可能的線都在你的影像中。而是嘗試50或100或類似的東西。這實際上並不是Hough變換的工作原理,但它非常接近。 –
我明白了。它應該調用投票數。在將閾值設置爲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)有一個發佈的答案,不知道它是否會有所幫助。 –