以下代码实现了最简单的Roberts算子边缘检测,输入为width*height的灰度图,存放在矩阵src中,输出也为width*height的灰度图(象素取值在0-255之间),存放在矩阵dst中。 程序代码: void Roberts(BYTE *dst,BYTE *src,int width,int height) { int A, B; // A(x-1, y-1) B(x, y-1) int C, D; // C(x-1, y) D(x, y) int x; int y; for (x = 0; x < width; x++) { *dst = 0; dst++; } // 指向第一行 src += width; // 不处理最上边和最左边 for (y = 1; y < height; y++) { // 指向每行第一列 *dst = 0; src++; dst++; for (x = 1; x < width; x++) { A = *(src - width - 1); B = *(src - width); C = *(src - 1); D = *src; int temp = (int)(sqrt((A - D) * (A - D) + (B - C) * (B - C))); // 越界判断 0 -- 255 if(temp >= 255) { *dst = 255; } else { *dst = (BYTE)temp; } src++; dst++; } // x } // y return; } // end of Roberts 本文来源:https://www.wddqw.com/doc/33ab63baf121dd36a32d8290.html