0
我有實現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嗯,我知道使用兩個緩衝區更容易,更好,但這是我的任務。只編輯原始圖像。那麼我可能需要一些緩衝區來保存這些值,直到它們可以取代原來的值,但正如我所說的,我不知道該怎麼做。如果改變了任何東西,我必須以串行和並行的方式進行。 –