資源簡介
絕對有用的圓檢測 用c語言實現,下載絕對值得,不值得找我,但是必須要安裝OPENCV

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include
#include
//鏈表結構
struct?param_unit
{
CvPoint?center;
int?radius;
int?accum;
param_unit?*next;
};
int?pht_circle(IplImage?*pImg?param_unit**?head_circle?int*?p_accum?=?NULLint?prm_ptnum?=?30?int?prm_tol?=?10?int?prm_dist?=?10?int?prm_accum?=?50);
int?round(double?a);
void?main()
{
//載入圖像
IplImage?*pImg_ori?*pImg;
pImg_ori?=?cvLoadImage(“mt1.bmp“CV_LOAD_IMAGE_COLOR);
pImg?????=?cvCreateImage(cvGetSize(pImg_ori)?8?1);
cvCvtColor(pImg_ori?pImg?CV_BGR2GRAY);
//計時開始
DWORD?time1?=?GetTickCount?();
//圖像預處理
cvSmooth(pImgpImg3);
double?prm_cannythd1prm_cannythd2;
prm_cannythd1?=?60;
prm_cannythd2?=?120;
? cvCanny(pImgpImgprm_cannythd1prm_cannythd23);
//PHT圓檢測算法
? param_unit?*?head_circle?=?NULL?*cur_circle?=?NULL?*end_circle?=?NULL;
int?maxaccum?=?0;
? int?circle_num?=?pht_circle(pImg?&head_circle?&maxaccum);
?
//計時結束
DWORD??time2?=?GetTickCount();
//輸出結果
double?time3?=?double(time2?-?time1)/1000;
cout<<“elapsed?time:“< <<“number?of?circles:?“<
cur_circle?=?head_circle;
int?i?=?0;
while(cur_circle)
{
if(cur_circle->accum?>=?maxaccum)
{
i++;
cvCircle(pImg_ori?cur_circle->center?cur_circle->radius?CV_RGB(02550)?2);
cout<<“circle?“<center.x<<““<center.y<<“)?r=“<radius< }
cur_circle?=?cur_circle->next;
}
//刪除鏈表
cur_circle?=?head_circle;
while(cur_circle)
{
end_circle?=?cur_circle->next;
delete?cur_circle;
cur_circle?=?end_circle;
}
//顯示圖像
cvNamedWindow(“OriginImage“);
cvNamedWindow(“B/WImage“);
cvShowImage(“OriginImage“pImg_ori);
cvShowImage(“B/WImage“pImg);
//釋放資源
cvWaitKey(0);
cvDestroyWindow(“OriginImage“);
cvDestroyWindow(“B/WImage“);
cvReleaseImage(&pImg_ori);
cvReleaseImage(&pImg);
}
int?pht_circle(IplImage?*pImg?param_unit**?head_circle?int*?p_accumint?prm_ptnum?int?prm_tol?int?prm_dist?int?prm_accum)
{
//? 參數說明:
//? prm_ptnum: 連通域閾值,連通域閾值小于此數則不考慮
//? prm_tol: 容忍度,兩個參數單元的差異小于此數,則認為表示相同的圓
//? prm_dist: 點的距離閾值,隨機選取的點須保證它們的兩兩距離不小于此數
//? prm_accum: 累加器閾值,累加器閾值小于此數,則不認為它對應的參數表示圓
//輪廓點的總數
long?int?pt_num?=?0;
CvMemStorage?*stor;
CvSeq?*cont_first?*cont;
//尋找連通域
stor =?cvCreateMemStorage(0);
cont_first??=?cvCreateSeq(CV_SEQ_ELTYPE_POINT?sizeof(CvSeq)?sizeof(CvPoint)?stor);
int?cont_num?=?cvFindContours(pImg?stor?&cont_first?sizeof(CvContour)?CV_RETR_LIST?CV_link_RUNS?cvPoint(00));
cont?=?cont_first;
//迭代次數
int?iteration;
//當前連通域點的個數
int?total;
//設置隨機種子
srand((unsigned)time(NULL));
//點間距離,為方便計算取?dist?=?|x1-x2|?+?|y1-y2|
double?cxcycr; //一個參數單元
param_unit?*head_unit?=?NULL?*cur_uint?*end_unit;
param_unit?*cur_circle;
CvPoint?*pt1
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????6415360??2009-05-23?16:23??MidTerm\References\Lect.VIS_016.Hough_transform.ppt
?????文件??????94916??2009-05-23?19:42??MidTerm\References\基于梯度的隨機Hough快速圓檢測方法(不錯).pdf
?????文件?????273666??2007-05-14?20:53??MidTerm\References\用點Hough變換實現圓檢測的方法.kdh
?????文件????2597376??2009-05-30?15:40??MidTerm\Documents\范東凱?08s053048?一種基于隨機點hough變換(PHT)的圓檢測方法.ppt
?????文件????1289728??2009-05-30?16:35??MidTerm\Documents\范東凱(08s053048)Report?Of?CV?MidTerm?Project.doc
?????文件??????73942??2008-12-06?00:12??MidTerm\Code\PHT_CircularDetc\0004a.bmp
?????文件?????750054??2009-05-26?12:36??MidTerm\Code\PHT_CircularDetc\cirkelhoughtest.bmp
?????文件?????307554??2009-05-19?16:02??MidTerm\Code\PHT_CircularDetc\mt1.bmp
?????文件?????256662??2009-05-19?16:02??MidTerm\Code\PHT_CircularDetc\mt2.bmp
?????文件?????213126??2009-05-19?16:03??MidTerm\Code\PHT_CircularDetc\mt3.bmp
?????文件???????6961??2009-06-10?11:03??MidTerm\Code\PHT_CircularDetc\PHT_CircularDetc.cpp
?????文件???????4236??2009-05-24?18:17??MidTerm\Code\PHT_CircularDetc\PHT_CircularDetc.dsp
?????文件????????557??2009-05-23?17:50??MidTerm\Code\PHT_CircularDetc\PHT_CircularDetc.dsw
?????文件??????50176??2009-06-24?15:10??MidTerm\Code\PHT_CircularDetc\PHT_CircularDetc.ncb
?????文件??????48640??2009-06-24?15:10??MidTerm\Code\PHT_CircularDetc\PHT_CircularDetc.opt
?????文件????????266??2009-06-10?11:06??MidTerm\Code\PHT_CircularDetc\PHT_CircularDetc.plg
?????目錄??????????0??2009-09-11?09:25??MidTerm\Code\PHT_CircularDetc
?????目錄??????????0??2009-09-11?09:25??MidTerm\References
?????目錄??????????0??2009-09-11?09:25??MidTerm\Documents
?????目錄??????????0??2009-09-11?09:25??MidTerm\Code
?????目錄??????????0??2009-09-11?09:25??MidTerm
-----------?---------??----------?-----??----
?????????????12383220????????????????????21
- 上一篇:MFC 在線考試系統
- 下一篇:C++實現RSA加密解密算法
評論
共有 條評論