HoughLine变换
生活随笔
收集整理的這篇文章主要介紹了
HoughLine变换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對于HoughLine變換,有兩種方法,標準霍夫變換(SHT)用的矩陣是CV_32FC2,用極坐標法記錄直線,而累積概率霍夫變換(PPHT)用的是CV_32FC
核心函數:
cvCvtColor,cvHoughLines2,cvGetSeqElem
程序:
代碼:
#include?"cv.h" #include?"cxcore.h" #include?"highgui.h" #include?<iostream> int?HoughLines(int?argc,char**?argv) { IplImage*?src=cvLoadImage("e:\\picture\\8.JPG",0); IplImage*?canny=cvCreateImage(cvGetSize(src),8,1); IplImage*?result=cvCreateImage(cvGetSize(src),8,3); IplImage*?result2=cvCreateImage(cvGetSize(src),8,3); CvSeq*?line=0; CvMemStorage*?storage?=?cvCreateMemStorage(0); cvCanny(src,canny,50,125);?//找線段的圖像必須先用cvCanny尋找輪廓 //查找直線 line=cvHoughLines2(canny,storage,CV_HOUGH_PROBABILISTIC,1,?CV_PI/180,?80,?30,?10?); cvCvtColor(canny,result,CV_GRAY2BGR);??//黑白轉換為彩色 cvCopy(result,result2); for(int?i=0;i<line->total;i++) { CvPoint?*pt=(CvPoint*)cvGetSeqElem(line,i);??//提取結果坐標 cvLine(result,pt[0],pt[1],cvScalar(0,0,255),3,8); } //查找圓 cvClearMemStorage(storage); CvMemStorage*?storage2?=?cvCreateMemStorage(0); cvSmooth(src,src,CV_GAUSSIAN,5,5); line=cvHoughCircles(src,storage2,CV_HOUGH_GRADIENT,2,10); for(int?i=0;i<line->total;i++) { std::cout<<"circle"<<std::endl; float?*p=(float*)cvGetSeqElem(line,i);??//提取結果坐標 CvPoint?pt=cvPoint(cvRound(p[0]),cvRound(p[1]));?//p[0]和p[1]是圓心的x和y坐標,不過要四舍五入取整:cvRound cvCircle(result2,pt,cvRound(p[2]),cvScalar(0,0,255),3,20); } cvNamedWindow("src"); cvNamedWindow("canny"); cvNamedWindow("result"); cvNamedWindow("result2"); cvShowImage("src",src); cvShowImage("canny",canny); cvShowImage("result",result); cvShowImage("result2",result2); cvWaitKey(0); cvDestroyWindow("src"); cvDestroyWindow("canny"); cvDestroyWindow("result"); cvDestroyWindow("result2"); cvReleaseImage(&src); cvReleaseImage(&canny); cvReleaseImage(&result); cvReleaseImage(&result2); return?0; }轉載于:https://blog.51cto.com/flyclc/1539825
總結
以上是生活随笔為你收集整理的HoughLine变换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#使用Sockets操作FTP【转载】
- 下一篇: java jaxb xml