我在python中编写了一个使用max()方法的脚本,我试图在c ++中重新创建一个类似的程序,但是我无法获得掩码中最大轮廓的值.
我试图在C++中使用算法库中的max_element()函数,但无济于事.我也尝试取消引用迭代器但收到一系列错误,这是我的代码:
if (contours.size() > 0)
{
c = *max_element(contours.begin(), contours.end());
//not compiling
}
Run Code Online (Sandbox Code Playgroud)
这是错误:
no match for 'operator=' (operand types are 'std::vector<std::vector<cv::Point_<int> > >' and 'std::vector<cv::Point_<int> >')
Run Code Online (Sandbox Code Playgroud)
以下是我在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)
M = cv2.moments(c)
Run Code Online (Sandbox Code Playgroud)
在Python示例中,您将传递比较器作为key参数
c = max(contours, key = cv2.contourArea)
Run Code Online (Sandbox Code Playgroud)
这样做的相当于是一个比较传给std::max_element以及
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);
});
Run Code Online (Sandbox Code Playgroud)
在这种情况下,c将是std::vector<cv::Point>表示轮廓的类型.
| 归档时间: |
|
| 查看次数: |
5559 次 |
| 最近记录: |