『OpenCV3』霍夫變換

來源:互聯網
上載者:User

標籤:png   strong   for   結構   接收   進一步   [1]   長度   就是   

霍夫變換常用於檢測直線特徵,經擴充後的霍夫變換也可以檢測其他簡單的映像結構。

在霍夫變換中我們常用公式

ρ = x*cosθ + y*sinθ

表示直線,其中ρ是圓的半徑(也可以理解為原點到直線的距離),θ是直線與水平線所成的角度(0~180°),確定了它們,也就確定一條直線了,和略有出入的是實際的原點定在圖片左上方。

原理是對於輸入的二值映像中的像素點(有值的),按照步長(參數三參數四對應rho和theta的步長)分別計算出每個點上的所有可能的直線。記錄下每條直線經過的點數(即存在多個點計算出的直線有交集),按照閾值(參數五)篩選合格映像。

霍夫變換

霍夫變換接收二值化的輸入,即已經進行初步的輪廓檢測之後,才進行直線檢測;輸出一組cv::Vec2f,通常用vector<CV::Vec2f>接收,所以我們通常使用Canny檢測之後進行霍夫變換

輸出的兩個float數字表示(rho, theta),使用cv::line繪圖,因其參數需要的是線段的兩個端點,所以我們不得不進行還原作業。

void hough() {cv::Mat image = cv::imread("road.png");cv::Mat midImage;cv::Canny(image, midImage, 50, 200, 3);std::vector<cv::Vec2f> lines;cv::HoughLines(midImage, lines, 1, CV_PI / 180, 150);  // 輸入的時二值映像,輸出vector向量for (size_t i=0; i < lines.size(); i++) {float rho = lines[i][0]; //就是圓的半徑rfloat theta = lines[i][1]; //就是直線的角度cv::Point pt1, pt2;double a = cos(theta), b = sin(theta);double 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));cv::line(image, pt1, pt2, cv::Scalar(55, 100, 195), 1); //Scalar函數用於調節線段顏色,就是你想檢測到的線段顯示的是什麼顏色cv::imshow("邊緣檢測後的圖", midImage);cv::imshow("最終", image);}}

機率霍夫變換

機率霍夫變換輸出Vec4i,直接輸出了每一條線段的首尾,繪圖更加方便。它是霍夫變換的改進版,由於演算法的改進(會沿著搜尋到的直線掃描映像),可以進一步檢測到線段的長度,除了最小投票數(參數五)外,可以額外限制最小線段長度(參數六)和同一線段最大像素間距(參數七)。

void houghp() {cv::Mat image = cv::imread("road.png");cv::Mat midImage;cv::Canny(image, midImage, 50, 200, 3);std::vector<cv::Vec4i> lines;cv::HoughLinesP(midImage, lines, 1, CV_PI / 180, 50);  // 輸入的時二值映像,輸出vector向量for (int i=0; i < lines.size(); i++) {cv::Point pt1(lines[i][0], lines[i][1]);cv::Point pt2(lines[i][2], lines[i][3]);cv::line(image, pt1, pt2, cv::Scalar(0, 255, 255));}cv::imshow("機率霍夫變換", image);}

『OpenCV3』霍夫變換

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.