У меня есть программа обработки изображений (canny-edge-Detection), вот одна часть кода:
short int **magnitude;
int rows=320, cols=240;
//Allocate memory to store the image, warning if not successful
if((*magnitude = (short *) calloc(rows*cols, sizeof(short))) == NULL){
//some warning
}
Я хотел бы использовать массив, чтобы избежать динамического выделения памяти, так как это невозможно в системе, на которой я собираюсь запустить код. Каков размер массива в этом случае? Я предположил
short int magnitude_arr[76800]
Однако выходное изображение было разрезано пополам.
Ваша декларация даст вам массив статического размера с правильным размером.
Если ваша программа больше не работает, ошибка в другом месте.
Если вы собираетесь использовать статический размер, вы можете подумать об использовании
std::array<short, 76800u> magnitude;
или же
std::vector<short> magnitude(rows * cols);
если вместо этого строки и столбцы могут измениться, чтобы динамический размер среды выполнения.
Если вам нужен указатель на сохраненные данные, оба класса имеют data()
функции-члены.
Это должно делать красиво.
const int rows=320;
const int cols=240;
short int magnitud_arr[rows * cols];