用c++ opencv实现python的sorted_cnt = sorted(contours, key=cv2.contourArea, reverse = True)
时间: 2024-03-19 08:45:37 浏览: 90
基于opencv的4种YOLO目标检测,C++和Python两个版本的实现,仅仅只依赖opencv库就可以运行+源代码+文档说明
在C++中,可以使用以下代码实现与Python中sorted函数中的key参数类似的功能:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace cv;
using namespace std;
bool compareContourAreas(vector<Point> contour1, vector<Point> contour2) {
double i = fabs(contourArea(Mat(contour1)));
double j = fabs(contourArea(Mat(contour2)));
return (i > j);
}
int main() {
vector<vector<Point>> contours; // 存储轮廓
vector<Vec4i> hierarchy; // 存储轮廓的拓扑结构
Mat image = imread("test.jpg", IMREAD_GRAYSCALE);
findContours(image, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));
sort(contours.begin(), contours.end(), compareContourAreas); // 排序
return 0;
}
```
在这个例子中,我们定义了一个名为compareContourAreas的函数,该函数接受两个轮廓作为参数,并返回一个布尔值。在该函数中,我们使用cv::contourArea函数计算每个轮廓的面积,并将它们的绝对值作为比较的依据。
最后,我们使用sort函数对轮廓进行排序,并传递compareContourAreas函数作为参数,以确保按面积大小的倒序排列。
需要注意的是,在C++中,没有直接的reverse参数,我们需要自己实现compareContourAreas函数来实现类似的功能。
阅读全文