c#编程从图像中提取数据在问题
比如一个黑色背景的图片,其中有好多的光点,并且大小和强度各不相同,怎么从中搜索出所有在光点在中心,半径等一些必要在信息,求算法或者思路...
比如一个黑色背景的图片,其中有好多的光点,并且大小和强度各不相同,怎么从中搜索出所有在光点在中心,半径等一些必要在信息,求算法或者思路
展开
1个回答
2013-07-06
展开全部
/// <summary>
/// 获取指定透明度的图像
/// </summary>
/// <param name="SourceBitmap">源图像</param>
/// <param name="OpaCityValue">透明度百分比</param>
/// <returns></returns>
/// <remarks></remarks>
public Bitmap TheTransparentBitmap(Bitmap SourceBitmap, double OpaCityValue)
{
try {
//定义临时图片副本
Bitmap ForOutBitmap = new Bitmap(SourceBitmap);
//定义图像数据
BitmapData bmpDATA = new BitmapData();
//将图像指定区域数据赋值
bmpDATA = ForOutBitmap.LockBits(new Rectangle(0, 0, SourceBitmap.Width - 1, SourceBitmap.Height - 1), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
//定义用来计算的Byte数组
byte[] BTS = new byte[bmpDATA.Stride * bmpDATA.Height + 1];
//将Byte设置为指定的图像数据
System.Runtime.InteropServices.Marshal.Copy(bmpDATA.Scan0, BTS, 0, BTS.Length - 1);
//为避免"除数不可为0"而设置的计算用变量
int tmpValue = 0;
//因已经指定为32位ARGB模式,所以每4个排列为 B G R A,A即透明度
for (int I = 0; I <= BTS.Length - 4; I += 4) {
tmpValue = BTS[I + 3] * OpaCityValue;
//修改A透明度
BTS[I + 3] = tmpValue;
}
//完成计算后将Byte组返回给指定的图像数据
System.Runtime.InteropServices.Marshal.Copy(BTS, 0, bmpDATA.Scan0, BTS.Length - 1);
//解锁该图像数据以使调用线程继续执行
ForOutBitmap.UnlockBits(bmpDATA);
//返回处理后的图像
return ForOutBitmap;
} catch (Exception ex) {
//如出现异常则返回空值
return null;
}
}
/// 获取指定透明度的图像
/// </summary>
/// <param name="SourceBitmap">源图像</param>
/// <param name="OpaCityValue">透明度百分比</param>
/// <returns></returns>
/// <remarks></remarks>
public Bitmap TheTransparentBitmap(Bitmap SourceBitmap, double OpaCityValue)
{
try {
//定义临时图片副本
Bitmap ForOutBitmap = new Bitmap(SourceBitmap);
//定义图像数据
BitmapData bmpDATA = new BitmapData();
//将图像指定区域数据赋值
bmpDATA = ForOutBitmap.LockBits(new Rectangle(0, 0, SourceBitmap.Width - 1, SourceBitmap.Height - 1), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
//定义用来计算的Byte数组
byte[] BTS = new byte[bmpDATA.Stride * bmpDATA.Height + 1];
//将Byte设置为指定的图像数据
System.Runtime.InteropServices.Marshal.Copy(bmpDATA.Scan0, BTS, 0, BTS.Length - 1);
//为避免"除数不可为0"而设置的计算用变量
int tmpValue = 0;
//因已经指定为32位ARGB模式,所以每4个排列为 B G R A,A即透明度
for (int I = 0; I <= BTS.Length - 4; I += 4) {
tmpValue = BTS[I + 3] * OpaCityValue;
//修改A透明度
BTS[I + 3] = tmpValue;
}
//完成计算后将Byte组返回给指定的图像数据
System.Runtime.InteropServices.Marshal.Copy(BTS, 0, bmpDATA.Scan0, BTS.Length - 1);
//解锁该图像数据以使调用线程继续执行
ForOutBitmap.UnlockBits(bmpDATA);
//返回处理后的图像
return ForOutBitmap;
} catch (Exception ex) {
//如出现异常则返回空值
return null;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询