#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) { cout << "无法打开文件" << endl; return 0; } fread(grey, sizeof(unsigned char), H * W, f); fclose(f); // 模板 int tw = 3; int th = 3; int template1[9]={-1,0,1,-1,0,1,-1,0,1}; int template2[9]={-1,-1,-1,0,0,0,1,1,1}; int i,j,k,l; unsigned char *result_grey; result_grey = new unsigned char[H * W]; for (i = 0; i < H * W; i++) { result_grey[i] = 255; } for (i = th / 2; i < H - th / 2; i++) { for (j = tw / 2; j < W - tw / 2; j++) { // 应用prewitt模板 int sum1 = 0; int sum2 = 0; int sum=0; for (k = -th / 2; k <= th / 2; k++) { for (l = -tw / 2; l <= tw / 2; l++) { sum1 += grey[(i + k) * W + (j + l)] * template1[(k + th / 2) * tw + (l + tw / 2)]; sum2 += grey[(i + k) * W + (j + l)] * template2[(k + th / 2) * tw + (l + tw / 2)]; } } sum=abs(sum1)+abs(sum2); if(sum>100) { result_grey[i * W + j] = 0; } else { result_grey[i * W + j] = 255; } } } FILE *fnew; fopen_s(&fnew, "./数据/prewitt.raw", "wb"); if (fnew) { fwrite(result_grey, sizeof(unsigned char), H * W, fnew); } else { cout << "创建文件失败" << endl; return 0; } }