2016-11-22 418 views
0

我已經在python中編寫腳本,調用cv2.minEnclosingCircle方法,我試圖在C++中重新創建類似的程序,但我無法通過參考傳遞半徑和中心。類型'cv :: Point2f'非const引用的無效初始化'

我曾嘗試使用有關無效初始化備選答案,並按照有關功能OpenCV的文檔,但目前尚不清楚,能夠通過半徑和中心沒有「&」不過,我想寧願不要

下面是關於方法http://docs.opencv.org/2.4/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html#minenclosingcircle

的文檔這裏是我的代碼:

 if (contours.size() > 0) 
     { 
      auto c = *std::max_element(contours.begin(),contours.end(), 
    [](std::vector<cv::Point> const& lhs, std::vector<cv::Point> const& rhs) 
    {return contourArea(lhs, false) < contourArea(rhs, false); }); 

      cv::minEnclosingCircle(c, &center, &radius); // not compiling 
     } 

我已經分別類型聲明半徑,且中心作爲浮動品種:: Point2f。

Error: invalid initialization of non-const reference of type 'cv::Point2f& {aka cv::Point_<float>& }' from an rvalue of type 'cv::Point2f* {aka cv::Point_<float>*} 

這裏是我如何做到這一點在Python:

if len(contours) > 0; 
     #find largest contour in mask, use to compute minEnCircle 
     c = max(contours, key = cv2.contourArea) 
     (x,y), radius) = cv2.minEnclosingCircle(c) #not compiling in c++ 
     M = cv2.moments(c) 
+0

錯字三木的道歉! –

+2

你爲什麼用'&'傳球?只需調用'cv :: minEnclosingCircle(c,center,radius);'。 'center'和'radius'通過引用傳遞,你不需要'&' – Miki

+1

[C++:參數傳遞參數傳遞參數「]的可能重複(http://stackoverflow.com/questions/19827119/c通過引用傳遞參數) – Miki

回答

1

您可能不需要通過明確使用&運營商在C++中的變量,這可以簡單地完成如:

std::vector<std::vector<cv::Point> > contours; 
std::vector<cv::Vec4i> hierarchy; 

// Here contours and hierarchy are implicitly passed by reference. 
cv::findContours(img, contours, hierarchy, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE); 

cv::Point2f center; 
float radius; 
if (contours.size() > 0) { 
    // center and radius implicitly passed by reference. 
    cv::minEnclosingCircle(contours[0], center, radius); 
} 
std::cout << "Center : " << center << std::endl; 
std::cout << "Radius : " << radius << std::endl; 
相關問題