C# I';我正在做边缘检测。但它只适用于一个图像
我正在尝试创建一个简单的边缘检测过滤器。正如我所说,它只适用于一个图像。我尝试用两个步骤创建这个过滤器C# I';我正在做边缘检测。但它只适用于一个图像,c#,image-processing,C#,Image Processing,我正在尝试创建一个简单的边缘检测过滤器。正如我所说,它只适用于一个图像。我尝试用两个步骤创建这个过滤器 模糊图像(带均值过滤器) 计算(原始图像模糊图像) 第一步很有效。第二个的代码和第一个一样简单。但我看到一条错误消息: System.ArgumentOutOfRangeException:'参数必须为正且
public void edgedetectionfilter( )
{
Bitmap InputPicture,BlurredPicture, OutputPicture;
InputPicture = new Bitmap(pBox_SOURCE.Image);
BlurredPicture = new Bitmap(pBox_PROCESSED.Image);
int PicWidth = InputPicture.Width;
int PicHeight= InputPicture.Height;
OutputPicture = new Bitmap(PicWidth, PicHeight);
OutputPicture = InputPicture;
int x, y, difR, difG, difB;
Color OrgPicColoValue,BluredPicColorValue;
for (x = 0; x < PicWidth; x++)
{
for (y = 0; y < PicWidth; y++)
{
BluredPicColorValue = BlurredPicture.GetPixel(x, y);
OrgPicColoValue = InputPicture.GetPixel(x, y); //ERROR LINE
difR = Convert.ToInt16(OrgPicColoValue.R -BluredPicColorValue.R);
difG = Convert.ToInt16(OrgPicColoValue.G- BluredPicColorValue.G );
difB = Convert.ToInt16(OrgPicColoValue.B- BluredPicColorValue.B);
if (difR > 255) difR = 255;
if (difG > 255) difG = 255;
if (difB > 255) difB = 255;
if (difR < 0) difR = 0;
if (difG < 0) difG = 0;
if (difB < 0) difB = 0;
OutputPicture.SetPixel(x, y, Color.FromArgb(difR, difG, difB));
}
}
pBoxMedian.Image = OutputPicture;
}
public void meanfilter(int p)
//KERNELSIZE=P
{
if (sliderKernel.Value % 2 == 0)
{
MessageBox.Show("Enter an odd number");
return;
}
Color ColorValue;
Bitmap InputPicture, OutputPicture;
InputPicture = new Bitmap(pBox_SOURCE.Image);
int PicWidth = InputPicture.Width;
int PicHeight= InputPicture.Height;
OutputPicture = new Bitmap(PicWidth, PicHeight);
OutputPicture = InputPicture;
int x, y, i, j, sumR, sumG, sumB, avgR, avgG, avgB;
for (x = (KernelSize - 1) / 2; x < PicWidth - (KernelSize - 1) / 2; x++)
{
for (y = (KernelSize - 1) / 2; y < PicHeight - (KernelSize- 1) / 2; y++)
{
toplamR = 0;
toplamG = 0;
toplamB = 0;
for (i = -((KernelSize - 1) / 2); i <= (KernelSize - 1) / 2; i++)
{
for (j = -((KernelSize - 1) / 2); j <= (KernelSize - 1) / 2; j++)
{
ColorValue= InputPicture.GetPixel(x + i, y + j);
sumR = sumR + ColorValue.R;
sumG = sumG + ColorValue.G;
sumB = sumB + ColorValue.B;
}
}
avgR = sumR / (KernelSize * KernelSize );
avgG = sumG / (KernelSize *KernelSize );
avgB = sumB / (KernelSize * KernelSize );
OutputPicture.SetPixel(x, y, Color.FromArgb(avgR, avgG, avgB));
}
}
pBox_PROCESSED.Image = OutputPicture;
}
public void edgedetectionfilter()
{
位图输入图片、模糊图片、输出图片;
InputPicture=新位图(pBox\u SOURCE.Image);
BlurredPicture=新位图(pBox\u处理过的图像);
int PicWidth=InputPicture.Width;
int PicHeight=InputPicture.Height;
OutputPicture=新位图(PicWidth、PicHeight);
OutputPicture=输入图片;
int x,y,difR,difG,difB;
颜色或PiccolorValue,模糊PiccolorValue;
对于(x=0;x255)difR=255;
如果(difG>255)difG=255;
如果(difB>255)difB=255;
如果(difR<0)difR=0;
如果(difG<0)difG=0;
如果(difB<0)difB=0;
OutputPicture.SetPixel(x,y,Color.FromArgb(difR,difG,difB));
}
}
pBoxMedian.Image=OutputPicture;
}
公共过滤器(INTP)
//内核大小=P
{
if(sliderKernel.Value%2==0)
{
MessageBox.Show(“输入奇数”);
返回;
}
颜色值;
位图输入图片,输出图片;
InputPicture=新位图(pBox\u SOURCE.Image);
int PicWidth=InputPicture.Width;
int PicHeight=InputPicture.Height;
OutputPicture=新位图(PicWidth、PicHeight);
OutputPicture=输入图片;
int x、y、i、j、sumR、sumG、sumB、avgR、avgG、avgB;
对于(x=(KernelSize-1)/2;x 对于(i=-((内核大小-1)/2);我你比较y
,而你可能想要y
。它在正方形上工作的图像是偶然的吗?错误消息说的比你发布的要多;你的代码取决于pBox\u处理的
和pBox\u源代码
,但这些都没有给出。可能是错误发生在你的耳朵里请仔细阅读你的代码。如果你想得到有用的答案,这一点很重要。谢谢,我没有给出它们,因为它们是picturebox。需要它们的哪些属性?