fb52de1e8f
Co-authored-by: Copilot <copilot@github.com>
84 lines
1.8 KiB
C++
84 lines
1.8 KiB
C++
#include<iostream>
|
|
#include<cmath>
|
|
#include<cstdio>
|
|
|
|
#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;
|
|
}
|
|
}
|