若干图像处理问题提问。。 1 图片如何处理成黑白两色。注意。不是灰度。是黑白两色。2 还有。如何按照象素点来切割图片?3 还有如何调整图片的对比度 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1,if( (r+g+b) > 255*3/2 ) whiteelse black; http://www.donews.net/vion/archive/2004/08/09/63381.aspxhttp://www.donews.net/vion/archive/2004/08/09/63377.aspx希望对楼主有所帮助. 2 还有。如何按照象素点来切割图片:看看这个http://ded.nuaa.edu.cn/download/WindowsApplication6.rar 回复sarcophile可否具体一点.我手头有一个处理成灰度的.如何修改? /// <summary> /// 转换成灰度图像 /// </summary> /// <param name="b"></param> /// <returns></returns> public static bool Gray(Bitmap b) { BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); int stride = bmData.Stride; System.IntPtr Scan0 = bmData.Scan0; unsafe { byte * p = (byte *)(void *)Scan0; int nOffset = stride - b.Width*3; byte red, green, blue; for(int y=0;y<b.Height;++y) { for(int x=0; x < b.Width; ++x ) { blue = p[0]; green = p[1]; red = p[2]; p[0] = p[1] = p[2] = (byte)(.299 * red + .587 * green + .114 * blue); p += 3; } p += nOffset; } } b.UnlockBits(bmData); return true; } 忘了说,是对每个像素if( (r+g+b) > 255*3/2 ) // 255*3/2 是个阈值,可以调整 该点 = whiteelse 该点 = black;图象处理的初级知识,具体看一下书吧,我也没太研究过。 sarcophile(食肉动物)你好.请问我应该如何用的的算法替代我贴的哪个代码中的算法?直接把p[0] = p[1] = p[2] = (byte)(.299 * red + .587 * green + .114 * blue);替换成if( (byte)(red + green + blue) > 255*3/2 ){p[0] = p[1] = p[2] = (byte)(255 + 255 + 255);}else{p[0] = p[1] = p[2] = (byte)(0 + 0 + 0);}我对指针操作不熟悉.我只是猜测是不是这样修改??另外就算修改成功.那么这个图象的存储信息依然是按照rgb色来表示的.有没有让它直接存储成为只有两个调色版的格式? http://www.microsoft.com/china/msdn/archives/library/dnaspp/html/colorquant.asphttp://www.microsoft.com/china/msdn/archives/library/dndotnet/html/servingimages.asp int nWidth=p_imgBmp.Width-1,nHeight=p_imgBmp.Height-1; for(int i=0;i<nHeight;i++) { for(int j=0;j<nWidth;j++) { c=p_imgBmp.GetPixel(j,i); if(c.R+c.G+c.B>255*3/2) p_imgBmp.SetPixel(j,i,System.Drawing.Color.FromArgb(255,255,255)); else p_imgBmp.SetPixel(j,i,System.Drawing.Color.FromArgb(0,0,0)); } } 关于C#模拟OCX控件发送服务器验证的难题! 在一个Form1上生成一个新Form2,之后如何关闭Form1? 用C#代码实现个人进程管理器 怎样在form 中把NetAdvantage的控件清除掉,小弟先感谢了哟! 模仿酷我音乐盒显示 C#中使用timer的问题 请教请教,谢谢 .net当中多文件上传问题,急~~~~急~~~~ checkedListBox绑定的问题 c# 点一个按键,使某一个函数自动循环运行,如何实现? 我想在一个按钮下删除一个指定的号码(textBox1.text),下面的代码可以了吗 急!!!新增记录时怎么根据一个字段的输入值,按百分比算出其他值???
if( (r+g+b) > 255*3/2 )
white
else
black;
http://www.donews.net/vion/archive/2004/08/09/63377.aspx
希望对楼主有所帮助.
看看这个
http://ded.nuaa.edu.cn/download/WindowsApplication6.rar
我手头有一个处理成灰度的.如何修改?
/// <summary>
/// 转换成灰度图像
/// </summary>
/// <param name="b"></param>
/// <returns></returns>
public static bool Gray(Bitmap b)
{
BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height),
ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0;
unsafe
{
byte * p = (byte *)(void *)Scan0;
int nOffset = stride - b.Width*3;
byte red, green, blue;
for(int y=0;y<b.Height;++y)
{
for(int x=0; x < b.Width; ++x )
{
blue = p[0];
green = p[1];
red = p[2];
p[0] = p[1] = p[2] = (byte)(.299 * red + .587 * green + .114 * blue);
p += 3;
}
p += nOffset;
}
}
b.UnlockBits(bmData);
return true;
}
if( (r+g+b) > 255*3/2 ) // 255*3/2 是个阈值,可以调整
该点 = white
else
该点 = black;
图象处理的初级知识,具体看一下书吧,我也没太研究过。
你好.请问我应该如何用的的算法替代我贴的哪个代码中的算法?直接把p[0] = p[1] = p[2] = (byte)(.299 * red + .587 * green + .114 * blue);替换成if( (byte)(red + green + blue) > 255*3/2 )
{
p[0] = p[1] = p[2] = (byte)(255 + 255 + 255);
}
else
{
p[0] = p[1] = p[2] = (byte)(0 + 0 + 0);
}我对指针操作不熟悉.我只是猜测是不是这样修改??
另外就算修改成功.那么这个图象的存储信息依然是按照rgb色来表示的.有没有让它直接存储成为只有两个调色版的格式?
for(int i=0;i<nHeight;i++)
{
for(int j=0;j<nWidth;j++)
{
c=p_imgBmp.GetPixel(j,i);
if(c.R+c.G+c.B>255*3/2)
p_imgBmp.SetPixel(j,i,System.Drawing.Color.FromArgb(255,255,255));
else
p_imgBmp.SetPixel(j,i,System.Drawing.Color.FromArgb(0,0,0));
}
}