2017-02-28 74 views
1

座標/半徑我有適用於圖像一些轉換,用於檢測圓OpenCV的獲得在像素

GaussianBlur->cvtColor(gray)->canny->HoughCircles

,並作爲結果我得到vector<Vec3f> circles;陣列的代碼。

如果我繪製OpenCV的結果:

cv::Point center(cvRound(circles[i][0]), cvRound(circles[i][1])); 
int radius = cvRound(circles[i][2]); 
    //circle center 
circle(originalMat, center, 3, Scalar(0,255,0), -1, 8, 0); 
    // circle outline 
circle(originalMat, center, radius, Scalar(0,0,255), 1, 8, 0); 

它看起來不錯(見附表形象,藍色圓圈

但如果我試圖不通過OpenCV的繪製圖像,我有另一圓(或有時橢圓形)(紅圈附件圖片上):

UIGraphicsBeginImageContext(image.size); //the same size as original 
[image drawAtPoint:CGPointZero]; 
CGContextRef ctx = UIGraphicsGetCurrentContext(); 
[[UIColor redColor] setStroke]; 
CGRect circleRect = CGRectMake(circles[i][0] - circles[i][2] , 
           circles[i][1] - circles[i][2], 
           circles[i][0] + circles[i][2], 
           circles[i][1] + circles[i][2] 
           ); 
circleRect = CGRectInset(circleRect, 5, 5); 
CGContextStrokeEllipseInRect(ctx, circleRect); 
UIImage *retImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

爲什麼會發生?如何獲得像素中的座標和半徑大小以正確繪製它?

enter image description here

P.S:UIImageMat談話,我得到的形式documentation

回答

2

CGRectMake needs (x, y, width, height)而不是座標左上角右下角點。所以你需要改變:

CGRect circleRect = CGRectMake(circles[i][0] - circles[i][2] , 
           circles[i][1] - circles[i][2], 
           2 * circles[i][2], 
           2 * circles[i][2] 
          ); 
+0

是的,它幫助,謝謝。圓中心是好的,但半徑有點小(我已經刪除舍入)比原:( – user5599807

+1

它有點小,因爲你用'CGRectInset' – Miki

+0

想念它,謝謝! – user5599807