亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

OpenCV利用霍夫變換進行直線檢測

2020-01-26 13:35:08
字體:
來源:轉載
供稿:網友

本文實例為大家分享了OpenCV利用霍夫變換進行直線檢測的具體代碼,供大家參考,具體內容如下

1.最簡單的霍夫變換是在圖像中識別直線。在平面直角坐標系(x-y)中,一條直線可以用下式表示:y=kx+b。

這表示參數平面(k-b)中的一條直線。因此,圖像中的一個點對應參數平面中的一條直線,圖像中的一條直線對應參數平面中的一個點。對圖像上所有的點作霍夫變換,最終所要檢測的直線對應的一定是參數平面中直線相交最多的那個點。這樣就在圖像中檢測出了直線。在實際應用中,直線通常采用參數方程:p=x/cos/theta+y/sin/theta。

Opencv里有以下函數檢測直線(最基本的霍夫變換):

void HoughLines(InputArray image, OutputArray lines, double rho, double theta, int threshold, double srn=0, double stn=0 )

具體用法看代碼就知道了:(現在版本的OpenCV使用函數cvHoughLines2)

#include "opencv2/opencv.hpp"#define PI 3.1415926 int main(int argc, char *argv[]){ cv::Mat image = cv::imread ("road.jpg"); cv::Mat result; cv::cvtColor (image,result,CV_BGRA2GRAY); cv::Mat contours; cv::Canny (result,contours,125,350); //邊緣檢測 std::vector<cv::Vec2f> lines; /*霍夫變換,獲得一組極坐標參數(rho,theta),每一對對應一條直線,保存到lines  第3,4個參數表示在(rho,theta)坐標系里橫縱坐標的最小單位,即步長*/ cv::HoughLines (contours,lines,1,PI/180,80); std::vector<cv::Vec2f>::const_iterator iter = lines.begin (); std::cout<<lines.size ()<<std::endl; while(iter != lines.end()) {  float rho = (*iter)[0];  float theta = (*iter)[1];  if(theta<PI/4.||theta>3.*PI/4) { //畫交點在上下兩邊的直線   cv::Point pt1(rho/cos(theta),0);   cv::Point pt2((rho-result.rows*sin(theta))/cos(theta),result.rows);   cv::line(image,pt1,pt2,cv::Scalar(255),1);  }  else   { //畫交點在左右兩邊的直線   cv::Point pt1(0,rho/sin(theta));   cv::Point pt2(result.cols,(rho-result.cols*cos(theta)/sin(theta)));   cv::line(image,pt1,pt2,cv::Scalar(255),1);  }  ++iter; } cv::namedWindow ("hough"); cv::imshow("hough",image); cv::waitKey (0);}

測試結果如下:

2.可以看出,上面的直線檢測存在以下問題:

1)只能檢測出線段所在的直線,而不知道具體線段位置,也不知道線段長度;

2)同一直線可能檢測出多條直線;

3)偶然地也可能誤判段直線。

針對這些問題,opencv有那么一個函數:(現在版本的OpenCV使用同一個函數cvHoughLines2)

void HoughLinesP(InputArray image, OutputArray lines, double rho, double theta, int threshold, dou-
ble minLineLength=0, double maxLineGap=0)

這個方法是通過概率霍夫變換實現的:

1)隨機獲取邊緣圖片上的前景點,映射到級坐標系畫曲線;

2)當極坐標系里面有交點達到最小投票數,將該點對應x-y坐標系的直線L找出來;

3)搜索邊緣圖片上前景點,在直線L上的點(且點與點之間距離小于maxLineGap的)連成線段,然后這些點全部刪除,并且記錄該線段的參數,就是起始點和終止點。(當然這里線段長度要滿足最小長度的,否則就不用記錄了)

4)重復1),2),3)

其使用方法見代碼:

#include "opencv2/opencv.hpp"#define PI 3.1415926 class LineFinder{private:  std::vector<cv::Vec4i> lines; // 直線對應的點參數向量  double deltaRho; //步長  double deltaTheta;  int minVote; // 判斷是直線的最小投票數  double minLength; // 判斷是直線的最小長度  double maxGap; // 同一條直線上點之間的距離容忍度public:  LineFinder() : deltaRho(1), deltaTheta(PI/180),  minVote(10), minLength(0.), maxGap(0.) {} //初始化   void setAccResolution(double dRho, double dTheta) // 設置步長  {   deltaRho= dRho;   deltaTheta= dTheta;  }    void setMinVote(int minv) // 設置最小投票數 {   minVote= minv;  }    void setLineLengthAndGap(double length, double gap) // 設置最小線段長度和線段間距容忍度  {   minLength= length;   maxGap= gap;  }     std::vector<cv::Vec4i> findLines(cv::Mat& binary) //尋找線段 {   lines.clear();   cv::HoughLinesP(binary,lines, deltaRho, deltaTheta, minVote,minLength, maxGap);   return lines;  }   void drawDetectedLines(cv::Mat &image, cv::Scalar color=cv::Scalar(255,255,255)) // 畫線段 {  std::vector<cv::Vec4i>::const_iterator it2=lines.begin();   while (it2!=lines.end())   {    cv::Point pt1((*it2)[0],(*it2)[1]);    cv::Point pt2((*it2)[2],(*it2)[3]);    cv::line( image, pt1, pt2, color);    ++it2;   }  }}; int main(int argc, char *argv[]){ cv::Mat image = cv::imread ("road.jpg"); cv::Mat result; cv::cvtColor (image,result,CV_BGRA2GRAY); cv::Mat contours; cv::Canny (result,contours,125,350); //邊緣檢測 LineFinder finder; finder.setMinVote (80); finder.setLineLengthAndGap (100,20); finder.findLines (contours); finder.drawDetectedLines (image); std::vector<cv::Vec2f> lines; cv::HoughLines (contours,lines,1,PI/180,80); std::vector<cv::Vec2f>::const_iterator iter = lines.begin (); std::cout<<lines.size ()<<std::endl; while(iter != lines.end()) {  float rho = (*iter)[0];  float theta = (*iter)[1];  if(theta<PI/4.||theta>3.*PI/4) { //畫交點在上下兩邊的直線   cv::Point pt1(rho/cos(theta),0);   cv::Point pt2((rho-result.rows*sin(theta))/cos(theta),result.rows);   cv::line(image,pt1,pt2,cv::Scalar(255),1);  }  else   { //畫交點在左右兩邊的直線   cv::Point pt1(0,rho/sin(theta));   cv::Point pt2(result.cols,(rho-result.cols*cos(theta)/sin(theta)));   cv::line(image,pt1,pt2,cv::Scalar(255),1);  }  ++iter; } cv::namedWindow ("hough"); cv::imshow("hough",image); cv::waitKey (0);}

測試結果如下:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
免费99精品国产自在在线| 少妇高潮 亚洲精品| 欧美精品制服第一页| 久久这里有精品| 有码中文亚洲精品| 日韩中文字幕视频在线观看| 亚洲曰本av电影| 日韩精品欧美国产精品忘忧草| 欧美日韩在线另类| 亚洲国产天堂久久综合| 成人免费视频在线观看超级碰| 国产亚洲成精品久久| 亚洲欧洲在线看| 国产精品亚洲激情| 精品激情国产视频| www欧美日韩| 国产欧美亚洲精品| 韩国欧美亚洲国产| 日韩在线观看免费网站| 国产精品白丝av嫩草影院| 国产精品18久久久久久首页狼| 欧美性开放视频| 成人黄色短视频在线观看| 成人亚洲欧美一区二区三区| 色诱女教师一区二区三区| 亚洲欧洲日产国码av系列天堂| 亚洲欧美另类国产| 成人午夜小视频| 久久综合网hezyo| xxxx欧美18另类的高清| 国产精品美女无圣光视频| 精品久久久91| 国产精品99久久久久久久久久久久| 国产a∨精品一区二区三区不卡| 在线电影av不卡网址| 日韩av在线看| 国产精品444| 中文字幕日韩免费视频| 欧美国产中文字幕| 成人黄色午夜影院| 韩国视频理论视频久久| 91精品久久久久久久久青青| 国产精品综合不卡av| 91香蕉嫩草神马影院在线观看| 日韩电视剧免费观看网站| 狠狠躁夜夜躁久久躁别揉| 2019中文字幕在线观看| 欧美区在线播放| 亚洲成人精品视频在线观看| 日韩高清电影免费观看完整版| 日本一区二三区好的精华液| 久久久久久久久久久久久久久久久久av| 日韩av电影在线免费播放| 欧美激情第99页| 欧美国产精品va在线观看| 欧美性猛交99久久久久99按摩| 亚洲色图欧美制服丝袜另类第一页| 中文字幕亚洲图片| 欧美日韩精品在线视频| 亚洲欧美日韩图片| 国产日韩欧美在线播放| 亚洲国产美女精品久久久久∴| 日韩精品中文字| 91网站在线免费观看| 中日韩午夜理伦电影免费| 亚洲免费电影一区| 亚洲成年人在线| 国产一区二区三区丝袜| 欧美激情免费看| 精品国内产的精品视频在线观看| 91精品国产综合久久男男| 成人在线中文字幕| 国产精品电影网| 久久久免费高清电视剧观看| 91精品国产自产91精品| 国产精品久久久久久久久久三级| 国产精品美女视频网站| 性欧美长视频免费观看不卡| 亚洲欧美日韩久久久久久| 午夜精品久久久久久久99热浪潮| 亚洲成年人在线播放| 中文字幕国产精品| 国产精品视频26uuu| 97视频国产在线| 国产亚洲欧美一区| 成人黄色在线免费| 久久夜色精品国产亚洲aⅴ| 国产精品一区专区欧美日韩| 欧美日韩在线另类| 日韩av一卡二卡| 九九精品视频在线观看| 亚洲无av在线中文字幕| 91免费人成网站在线观看18| 午夜精品免费视频| 国产精品男人爽免费视频1| 国产精品国产福利国产秒拍| 亚洲精品乱码久久久久久按摩观| 日韩有码视频在线| 成人h猎奇视频网站| 中文字幕成人在线| 色综合老司机第九色激情| 一个人看的www久久| 国产99久久精品一区二区 夜夜躁日日躁| 国产日韩欧美电影在线观看| 亚洲乱码一区av黑人高潮| 日韩中文字幕在线播放| 欧美色图在线视频| 欧洲成人午夜免费大片| 国产精品久久久久久av福利| 久久中文字幕在线视频| 国产97色在线| 亚洲福利在线观看| 国内精品久久久久久久| 久久影视电视剧免费网站清宫辞电视| 国产精品69久久| 久久五月天色综合| 国产精品久久久久久av下载红粉| 精品国产美女在线| 亚洲成人久久久久| 欧美日韩精品在线播放| 久久亚洲精品一区| 欧美午夜xxx| 欧美黄色小视频| 精品视频一区在线视频| 九九九久久久久久| 亚洲国产欧美一区| 日韩在线高清视频| 久久久久久久久爱| 日本19禁啪啪免费观看www| 精品毛片三在线观看| 欧美精品九九久久| 奇米影视亚洲狠狠色| 欧美另类在线播放| 欧美日韩成人在线视频| 在线观看国产精品日韩av| 午夜精品久久久久久久久久久久| 日本久久久a级免费| 精品一区精品二区| 亚洲人成电影网站色www| 精品美女永久免费视频| 美女少妇精品视频| 亚洲四色影视在线观看| 韩国精品久久久999| 日本精品视频在线播放| 欧美夫妻性视频| 亚洲国产成人精品一区二区| 久热精品视频在线免费观看| 91免费精品国偷自产在线| 国产美女91呻吟求| 日韩电影免费观看在线观看| 亚洲国产精品va在线观看黑人| 一本色道久久88综合日韩精品| 久久福利网址导航| 欧美高清在线视频观看不卡| 久久九九国产精品怡红院| 欧美乱大交做爰xxxⅹ性3| 96国产粉嫩美女| 色七七影院综合| 日韩免费精品视频| 精品人伦一区二区三区蜜桃免费| 一区二区三区视频免费| 日本久久中文字幕| 国产精品视频1区| 国产精品揄拍一区二区|