#include #include #include #define H 265 #define W 272 using namespace std; int main() { unsigned char *grey; grey = new unsigned char[H * W]; FILE *f; fopen_s(&f, "./数据/blood.raw", "rb"); if (f) { fread(grey, sizeof(unsigned char), H * W, f); fclose(f); } else { cout << "无法打开文件" << endl; return 0; } // sobel模板 int tw = 3; int th = 3; // xy方向的sobel模板 int sobel_x[9]={-1,0,1,-2,0,2,-1,0,1}; int sobel_y[9]={-1,-2,-1,0,0,0,1,2,1}; int i,j,k,l; // 中间变量 unsigned char *result; result = new unsigned char[H * W]; for (i = 0; i < H * W; i++) { result[i] = 255; } for (i = th / 2; i < H - th / 2; i++) { for (j = tw / 2; j < W - tw / 2; j++) { int gx = 0; int gy = 0; for (k = -th / 2; k <= th / 2; k++) { for (l = -tw / 2; l <= tw / 2; l++) { int pixel = grey[(i + k) * W + (j + l)]; int index = (k + th / 2) * tw + (l + tw / 2); gx += pixel * sobel_x[index]; gy += pixel * sobel_y[index]; } } int sum = (int)sqrt(gx * gx + gy * gy); if (sum > 100) { result[i * W + j] = 0; } else { result[i * W + j] = 255; } } } // 将结果写入文件 FILE *fresult; fopen_s(&fresult, "./数据/sobel.raw", "wb"); if (fresult) { fwrite(result, sizeof(unsigned char), H * W, fresult); fclose(fresult); } else { cout << "创建文件失败" << endl; return 0; } }