写C++代码将图片指定位置色块生成数组用于A星寻路
时间: 2024-03-13 09:42:43 浏览: 69
A星寻路C++代码。
4星 · 用户满意度95%
下面是一个C++代码示例,用于将一张灰度图像指定位置的色块进行二值化,并生成用于A星寻路的数组。
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 读入灰度图像
Mat img_gray = imread("image_gray.png", IMREAD_GRAYSCALE);
// 指定位置的色块的左上角和右下角坐标
int x1 = 100, y1 = 100;
int x2 = 200, y2 = 200;
// 将指定位置的像素设为白色,其他像素设为黑色
Mat img_binary = Mat::zeros(img_gray.rows, img_gray.cols, CV_8UC1);
for (int i = x1; i <= x2; i++) {
for (int j = y1; j <= y2; j++) {
img_binary.at<uchar>(i, j) = 255;
}
}
// 将二值图像转化为数组
int rows = img_binary.rows;
int cols = img_binary.cols;
int **map_array = new int*[rows];
for (int i = 0; i < rows; i++) {
map_array[i] = new int[cols];
for (int j = 0; j < cols; j++) {
map_array[i][j] = img_binary.at<uchar>(i, j) / 255;
}
}
// 打印数组
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
cout << map_array[i][j] << " ";
}
cout << endl;
}
// 释放内存
for (int i = 0; i < rows; i++) {
delete[] map_array[i];
}
delete[] map_array;
return 0;
}
```
在以上代码中,我们首先使用`imread`方法读入一张灰度图像,并将其存储在`img_gray`变量中。然后,我们指定了一个矩形区域,使用两个坐标点`(x1, y1)`和`(x2, y2)`来表示该矩形区域的左上角和右下角的像素坐标。接着,我们将该矩形区域内的像素设为白色,其他像素设为黑色,并将结果存储在`img_binary`变量中。最后,我们将二值图像转化为数组,并将数组打印出来。最后,我们释放了申请的内存。
阅读全文