В настоящее время я пытаюсь обрезать большую матрицу изображений с помощью Magick ++. Я перебираю все изображения и разрезаю каждое из них на сетку плиток 3х3, чтобы получить их средние значения RGB. В настоящее время приведенный ниже код работает нормально для первого изображения, но на 10-й итерации (второе изображение в матрице) программа выдает ошибку («libc ++ abi.dylib: terminate selected, выбрасывая исключение \ n Прерывание прерывания: 6 «) на этапе обрезки. Я смотрел на это снова и снова и не могу найти никаких проблем с геометрией математики. Любая помощь будет высоко ценится, спасибо!
slices
является матрицей изображений, каждое из которых является изображением 12×12 пикселей. averages
это массив RGB
значения, которые являются самоопределяемой структурой, содержащей 3 дюйма (красный, зеленый и синий).
void ImageSlicer::calculateRGBValues() {
int subwidth = 612 / numSlices;
int subheight = 612 / numSlices;
int average_subwidth = subwidth / cutSize;
int average_subheight = subheight / cutSize;
for (int x = 0; x < numSlices; x++) {
for (int y = 0; y < numSlices; y++) {
Image currentSlice = slices[x][y];
for (int i = 0; i < cutSize; i++) {
for (int j = 0; j < cutSize; j++) {
Image cropped = currentSlice;
cropped.crop(Geometry(average_subwidth,
average_subheight,
i * average_subwidth,
j * average_subheight,
false,
false));
cropped.scale(Geometry(1,1));
ColorRGB pixel = cropped.pixelColor(1,1);
RGB avg;
avg.red = pixel.red() * 255;
avg.green = pixel.green() * 255;
avg.blue = pixel.blue() * 255;
averages.push_back(avg);
}
}
}
}
}
Задача ещё не решена.
Других решений пока нет …