怎么将vector<vector<int>>& xlines和vector<vector<int>>& ylines里存的矩形在unsigned short* labelimg上画出来
时间: 2023-10-22 15:05:35 浏览: 148
可以按照以下步骤进行操作:
1. 遍历 `xlines` 和 `ylines`,将每个矩形的起始点和终止点坐标保存下来。
2. 遍历所有矩形的坐标,将对应的像素在 `labelimg` 上标记为矩形的标签值。可以使用双重循环遍历矩形的所有像素,然后将像素的值设为矩形的标签值。具体实现可以使用以下代码:
```c++
for (int i = startX; i < endX; i++) {
for (int j = startY; j < endY; j++) {
labelimg[i * width + j] = label;
}
}
```
其中,`startX`、`endX`、`startY`、`endY` 分别为当前矩形的左上角和右下角坐标,`width` 为 `labelimg` 的宽度,`label` 为当前矩形的标签值。
完整代码示例:
```c++
void drawRectangles(vector<vector<int>>& xlines, vector<vector<int>>& ylines, unsigned short* labelimg, int width, int height) {
int numRects = xlines.size();
for (int i = 0; i < numRects; i++) {
int startX = xlines[i][0];
int endX = xlines[i][1];
int startY = ylines[i][0];
int endY = ylines[i][1];
unsigned short label = i + 1;
for (int i = startX; i < endX; i++) {
for (int j = startY; j < endY; j++) {
labelimg[i * width + j] = label;
}
}
}
}
```
注意,这里假设每个矩形的标签值为其在 `xlines` 和 `ylines` 中的索引值加 1,因此标签值从 1 开始。如果你的标签值不同,需要做相应的修改。
阅读全文