【學習opencv第五篇】霍夫線變換


霍夫變換是一種在圖像中尋找直線,圓及其他簡單形狀的方法。opencv支持兩種不同的霍夫變換:標准霍夫變換(SHT)和累積概率霍夫變換(PPHT)。在opencv中可以使用同一個函數來使用兩種算法。

相關函數如下:

CvSeq* cvHonghLines2(CvArr* image,  void* line_storage,int mehtod, double rho, double theta, int threshold,  double param1 =0, double param2 =0 );
image   輸入 8-比特、單通道 (二值) 圖像
line_storage  存儲檢測到的線段,可以是序列或者單行/單列矩陣
mehtod     Hough 變換變量
rho
    與象素相關單位的距離精度
theta  弧度測量的角度精度
threshold  閾值參數。如果相應的累計值大於 threshold, 則函數返回的這個線段
param1 和param2為與變換方法有關的參數

#include "StdAfx.h"
#include<cv.h>
#include<highgui.h>
#include<math.h>
int main()
{
	IplImage* sourceImage;
	sourceImage= cvLoadImage("大中南.jpg",0);
	IplImage* destImage=cvCreateImage(cvGetSize(sourceImage),8,1);
	IplImage* colorImage=cvCreateImage(cvGetSize(sourceImage),8,3);
	//分配空間,默認64KB
	CvMemStorage* storage=cvCreateMemStorage(0);
	CvSeq* lines=0;                     //指向所檢測到的線的序列的第一條...
	
	//首先對源圖像進行邊緣檢測,結果以灰度圖顯示,
	cvCanny(sourceImage,destImage,50,200,3);
	cvCvtColor(destImage,colorImage,CV_GRAY2BGR);
	
	lines=cvHoughLines2(//返回一個指向CvSeq序列結構的的指針,
		destImage,//要進行霍夫檢測的圖像,必須是8位的,
		storage,  //保存結果位置的指針,
		CV_HOUGH_PROBABILISTIC,
		1,        //這兩個參數都是用來設置直線的分辨率的
		CV_PI/180,
		80,      //一個閾值
		30,
		10     //表示支持所返回的直線的點的數量
		);
	int index;     //index為直線的索引
	for(index=0;index<lines->total;index++)    //遍歷每一條線
	{
		CvPoint* line=(CvPoint*)cvGetSeqElem(lines,index);
		cvLine(colorImage,line[0],line[1],CV_RGB(255,0,0),3,8);
	}

	cvNamedWindow("SOURCEIMAGE",1);
	cvShowImage("SOURCEIMAGE",sourceImage);
	
	cvNamedWindow("COLORIMAGE",1);
	cvShowImage("COLORIMAGE",colorImage);
	
	cvNamedWindow("HOUGH",1);
	cvShowImage("HOUGH",colorImage);
	cvWaitKey(0);
	return 0;
}
運行結果:


Reference《學習opencv》

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM