请将上面的每一趟用图像表示
时间: 2024-03-15 16:43:38 浏览: 37
以下是每一趟排序的图像表示。其中,红色数字表示堆顶元素,黄色数字表示已经排序完成的元素,灰色数字表示未排序的元素。
1.
![堆排序1](https://i.imgur.com/9yU5O9S.png)
2.
![堆排序2](https://i.imgur.com/wmAB3iQ.png)
3.
![堆排序3](https://i.imgur.com/8O8eq3n.png)
4.
![堆排序4](https://i.imgur.com/CJQyLX2.png)
5.
![堆排序5](https://i.imgur.com/Gj8WiCg.png)
6.
![堆排序6](https://i.imgur.com/ocC0oBJ.png)
7.
![堆排序7](https://i.imgur.com/2uQq95w.png)
8.
![堆排序8](https://i.imgur.com/6W8J7Ne.png)
9.
![堆排序9](https://i.imgur.com/3jWQ1nh.png)
相关问题
android opencv取光班中心
在OpenCV中,可以使用cv::findContours和cv::moments函数来找出光斑的中心。具体步骤如下:
1. 对图像进行二值化处理,使光斑变为白色,背景变为黑色。
2. 使用cv::findContours函数找出光斑的轮廓。
3. 对每个轮廓计算其重心,即光斑的中心。
以下是一个示例代码,可以找出图像中所有光斑的中心:
```c++
#include <opencv2/opencv.hpp>
#include <vector>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
// 读取图像
Mat image = imread("image.png", IMREAD_GRAYSCALE);
// 二值化处理
Mat binary;
threshold(image, binary, 0, 255, THRESH_BINARY | THRESH_OTSU);
// 找出轮廓
vector<vector<Point> > contours;
findContours(binary, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
// 计算轮廓重心并输出
for (int i = 0; i < contours.size(); i++)
{
// 计算轮廓重心
Moments m = moments(contours[i], false);
Point2f center(m.m10 / m.m00, m.m01 / m.m00);
// 输出重心坐标
cout << "Center of spot " << i << " is (" << center.x << ", " << center.y << ")" << endl;
}
return 0;
}
```
在上面的代码中,cv::findContours函数用于找出轮廓,其中的参数含义如下:
- binary:输入的二值化图像。
- contours:输出的轮廓向量。
- RETR_EXTERNAL:只寻找最外层轮廓。
- CHAIN_APPROX_SIMPLE:只存储轮廓的端点。
在计算轮廓重心时,使用cv::moments函数计算轮廓的矩。对于每个轮廓,矩m00表示轮廓面积,m10表示x方向上的一阶矩,m01表示y方向上的一阶矩。重心坐标为(m10/m00, m01/m00)。
阅读全文