如何避免你说的这种越界呢
时间: 2024-03-28 19:41:44 浏览: 14
为了避免越界,你可以在内部循环前添加一些范围检查代码,以确保在处理像素时,不会访问图像范围之外的像素。这可以通过使用 OpenCV 提供的 `cv::Rect` 类型来实现。在这个应用场景下,你可以使用 `cv::Rect` 类型来指定每个点周围 4x4 区域的范围,然后在循环内部检查像素坐标是否在这个范围内。
以下是修改后的代码:
```c++
// 定义每个点周围的矩形区域大小
const int RECT_SIZE = 4;
for (auto it : m_pts) {
// 计算矩形区域的左上角坐标
int rect_x = it.x() - RECT_SIZE / 2;
int rect_y = it.y() - RECT_SIZE / 2;
// 创建矩形区域,并确保其在图像范围内
cv::Rect rect(rect_x, rect_y, RECT_SIZE, RECT_SIZE);
rect = rect & cv::Rect(0, 0, ImgBin.cols, ImgBin.rows);
// 遍历矩形区域内的像素,并将其设为白色
for (int nRow = rect.y; nRow < rect.y + rect.height; nRow++) {
for (int nCol = rect.x; nCol < rect.x + rect.width; nCol++) {
ImgBin.row(nRow).data[nCol] = 255;
}
}
}
```
这样,就可以确保遍历的像素坐标都在图像范围之内,避免了越界的问题。