Tag: 图像处理

这段代码可以优化吗?

我有一些图像处理代码循环通过2个多维字节数组(相同大小)。 它从源数组获取一个值,对其执行计算,然后将结果存储在另一个数组中。 int xSize = ResultImageData.GetLength(0); int ySize = ResultImageData.GetLength(1); for (int x = 0; x < xSize; x++) { for (int y = 0; y < ySize; y++) { ResultImageData[x, y] = (byte)((CurrentImageData[x, y] * AlphaValue) + (AlphaImageData[x, y] * OneMinusAlphaValue)); } } 循环当前需要~11ms,我假设主要是因为访问字节数组值,因为计算非常简单(2次乘法和1次加法)。 有什么办法可以加快速度吗? 这是我的程序的一个时间关键部分,这个代码每秒被调用80-100次,所以任何速度增加,无论多小,都会产生影响。 此刻xSize = 768和ySize = 576,但这将在未来增加。 更新 :感谢Guffa (请参阅下面的答案),以下代码为每个循环节省了4-5ms。 […]

加速C#中的矩阵加法

我想优化这段代码: public void PopulatePixelValueMatrices(GenericImage image,int Width, int Height) { for (int x = 0; x < Width; x++) { for (int y = 0; y < Height; y++) { Byte pixelValue = image.GetPixel(x, y).B; this.sumOfPixelValues[x, y] += pixelValue; this.sumOfPixelValuesSquared[x, y] += pixelValue * pixelValue; } } } 这将用于图像处理,我们目前正在运行约200张图像。 我们优化了GetPixel值以使用不安全的代码,我们没有使用image.Width或image.Height,因为这些属性增加了我们的运行时成本。 但是,我们仍然处于低速状态。 问题是我们的图像是640×480,所以循环的中间被调用大约640x480x200倍。 我想问一下是否有办法以某种方式加速它,或者让我相信它的速度足够快。 也许一种方法是通过一些快速的Matrix Addition,或者Matrix Addition固有的n […]

确定图像倾斜的有效方法

我正在尝试编写一个程序来以编程方式确定任意图像中的倾斜或旋转角度。 图像具有以下属性: 包括在明亮的背景上的黑暗文本 偶尔包含仅以90度角相交的水平或垂直线。 偏斜在-45到45度之间。 将此图像视为参考(其倾斜度为2.8度)。 到目前为止,我已经提出了这个策略:从左到右画一条路线,总是选择最近的白色像素。 据推测,从左到右的路线将优选沿着图像倾斜的文本行之间的路径。 这是我的代码: private bool IsWhite(Color c) { return c.GetBrightness() >= 0.5 || c == Color.Transparent; } private bool IsBlack(Color c) { return !IsWhite(c); } private double ToDegrees(decimal slope) { return (180.0 / Math.PI) * Math.Atan(Convert.ToDouble(slope)); } private void GetSkew(Bitmap image, out double minSkew, out double maxSkew) { decimal […]

删除图像背景/场景

我在第一部分拍摄了一张图像,但后来我想要从右侧拍摄的背景中提取所有内容(没有手的那个),这样就可以提取手了。 我现在的问题是我无法提取背景。 我尝试了一种尝试扫描每个像素并查看它是否匹配的方法。 如果是,则将像素变为黑色。 但是,该计划失败了。 有没有其他方法可以解决这个问题? 后来我会使用神经网络来检测它是否是一只手。

用C#检测摄像机图像中的对象

我有一个从实时网络摄像头拍摄的图像,我希望能够检测图像中的特定对象并提取其中的一部分以进行进一步处理。 具体来说,图像将是一个游戏板,让我们说这个问题的目的是它是一个数独游戏板。 我最初的方法是寻找对比区域,并从那里开始研究,但我似乎最终有很多潜在的边缘(很多错误),并没有真正的线索,如何找出哪些是我真正想要的! 是否有任何算法,库,代码示例,甚至是那些明智的想法,关于我如何寻找和提取图像的相关部分?

WPF API可以安全地用在WCF服务中吗?

我需要使用客户端XAML(来自Silverlight)并创建与服务器端资源(高分辨率图像)合并的位图,并且可以使用WPF(DrawingContext等)轻松地完成此操作。 有人提到服务器端(在IIS WCF中托管)使用WPF类似于在服务器上运行Office,这是一个非常糟糕的主意。 WPF是否可以在服务器上运行? 有哪些替代方案(尤其是xaml)? 我需要注意什么(内存泄漏,线程等)?

免费/开放图书馆,以找到类似的图像

我正在寻找稳定和成熟的免费/开源库,可以比较两个图像。 我找到了这个,但我想知道你是否使用了更好的一个! 类似图像finder – 用C#和RGB进行.NET图像处理

获取图像中每种颜色的百分比使用情况

我有这个工作,但它在jpeg图像上非常缓慢,也需要一些改变。 我需要知道图像中的各个颜色(RGB的公差为+/- 1)和该颜色的图像的百分比。 因此,如果图像是黑白的,则会出现白色:74%黑色:26% 下面的代码就像我说的那样,但我需要添加一个容差系统,我不知道如何做到这一点。 private Dictionary getPixelData(Bitmap image) { Dictionary pixelData = new Dictionary(); //int col, row; //int r, g, b; Color pixel; double offset = 0.000001; int hmm = (image.Height * image.Width); double current = 0; offset = 100 / double.Parse(hmm.ToString());// 0.01;// 100 / (image.Height * image.Width) * 10000; try { for (int […]

如何基于简单的多边形绘制图像?

我想将一个大致矩形的区域复制到一个矩形区域。 例: 两个区域都由角点定义。 总体方向保持不变(没有翻转等)。 简单地旋转源图像不起作用,因为相对的侧面可能具有不同的长度。 到目前为止,我发现在纯C#中没有办法做到这一点(手动像素复制除外),所以我想我必须求助于Windows API或某些第三方库?

c#中的图像处理库

从哪里可以获得C#.Net中的图像处理库?