#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include "stdio.h"
#include "iostream"
int main()
{
IplImage* img = 0;
IplImage * pImage = NULL; //宣告一個空間
IplImage * pImg8u = NULL; //宣告一個空間
CvMemStorage * storage = NULL;//宣告一空間來儲存測到的線段
CvSeq * circles = NULL;
img=cvLoadImage("123.jpg");//將圖片讀入img
pImage = cvCloneImage(img);
pImg8u = cvCreateImage(cvGetSize(pImage),IPL_DEPTH_8U,1);
//轉成灰階圖像
if(img->nChannels != 1)
cvCvtColor(pImage,pImg8u,CV_BGR2GRAY);
else
cvCopy(pImage,pImg8u);
//將圖片平滑化
cvSmooth(pImg8u,pImg8u,CV_GAUSSIAN,7,7);
//創建內存存儲空間(默認值為0表示儲存空間是64k)
storage = cvCreateMemStorage(0);
//找出圖中的圓
circles = cvHoughCircles(pImg8u,storage,CV_HOUGH_GRADIENT,2,pImg8u->height/4,250,55);
int i;
for(i=0;i
{
float * p = (float *)cvGetSeqElem(circles,i);
//依據所給的圓心和半徑來做話元或填充圓的指令
cvCircle(pImage,cvPoint(cvRound(p[0]),cvRound(p[1])),cvRound(p[2]),CV_RGB(255,0,0),3,8,0);//後面代表圓的半徑,顏色,線寬,線型,段數
}
//建立視窗
cvNamedWindow("Houg Circle Transform",1);
//顯示視窗
cvShowImage("Houg Circle Transform",pImage);
//等待按鍵
cvWaitKey(0);
//刪除視窗
cvDestroyWindow("Houg Circle Transform");
cvReleaseImage(& pImage);//釋放圖片
cvReleaseImage(& pImg8u);//釋放圖片
}
所用之函數:
CvMemStorage *cvCreateMemStorage(int block_size=0);
->創造內存儲存空間 裡面宣告的參數,設為0表示儲存空間為64k.
Void cvCircle(CvArr * img,CvPoint center,int radious,CvScalarcolor,int thickness==1,int
Line_type==8,int shift==0);
->在所選擇的圖像上,依據所給的圓心和半徑來對圖形作畫圓或填充圓.
對於cvHoughCircles還是不太了解如何使用
回覆刪除還有在程式中
cvCircle(pImage,cvPoint(cvRound(p[0]),cvRound(p[1])),cvRound(p[2]),CV_RGB(255,0,0),3,8,0);
內的cvRound(p[0])不太懂.