У меня есть этот код, который реализует обнаружение края Prewitt. То, что мне нужно сделать, это реализовать его только с одним буфером, то есть я не буду создавать копию изображения, но редактировать исходное изображение. Поэтому, если я хочу изменить пиксель со значением 78, я не могу добавить новое значение, например. 100, пока все окружающие пиксели не имеют значения считывания 78. Color values of the pixels. Я пытался весь день, чтобы понять это, но не мог, если бы кто-то напишет мне какой-то псевдокод я был бы очень благодаренФильтр Prewitt, обнаружение края
void filter_serial_prewitt(int *inBuffer, int *outBuffer, int width, int height){
for (int i = 1; i < width - 1; i ++) {
for (int j = 1; j < height - 1; j ++) {
int Fx = 0;
int Fy = 0;
int F = 0;
for (int m = -1; m <= 1; m++) {
for (int n = -1; n <= 1; n++) {
Fx += inBuffer[(j + n) * width + (i + m)] * n;
Fy += inBuffer[(j + n) * width + (i + m)] * m;
}
}
F = abs(Fx) + abs(Fy);
if (F < THRESHOLD){
outBuffer[j * width + i] = 255;
} else{
outBuffer[j * width + i] = 0;
}
}
}
}
Зачем вам нужно это делать только с 1 буфером? Не каждый метод обработки изображений может быть выполнен на месте, а многие более эффективны, если вы можете разбить их на несколько проходов (особенно определенные типы сверток). Один из вариантов заключается в использовании буфера, длина которого составляет всего несколько строк, а не всего второго изображения. Это приемлемый ответ? – user1118321
@ user1118321 Ну, я знаю, что с двумя буферами все намного проще и лучше, но в этом моя задача. Редактируйте только оригинальное изображение. Ну, мне, вероятно, понадобится буфер для хранения значений, пока они не смогут заменить оригинальные, но, как я уже сказал, я понятия не имею, как это сделать. Я должен делать это последовательно и параллельно, если это что-то меняет .. –