Tag: 图像处理

扫描图像以查找矩形

我正在尝试扫描一个恒定大小的图像,并在其中找到绘制的矩形。 矩形可以有任何尺寸,但只有红色。 这不是问题的起点。 我将使用已经编写的函数,稍后我会将其用作伪代码调用代码逻辑。 Rectangle Locate(Rectangle scanArea); //扫描给定扫描区域中的矩形。 如果未找到rectagle,则返回null。 我的逻辑是这样的: 使用Locate()函数查找第一个初始红色矩形,并将完整图像大小作为参数。 现在,划分其余区域,并继续递归扫描。 这个算法逻辑的要点是你永远不会检查已经检查过的区域,并且你不必使用任何条件,因为scanArea参数总是一个你之前没有scanArea的新区域(这要归功于划分技术)。 除法过程如下所示:当前找到的矩形的右侧区域,底部区域和左侧区域。 这是一个说明该过程的图像。 (白色虚线矩形和黄色箭头不是图像的一部分,我只是为了插图而添加它们。)如您所见,一旦发现红色矩形,我会一直扫描它的右边,左下角。 递归。 所以这是该方法的代码: List difList=new List(); private void LocateDifferences(Rectangle scanArea) { Rectangle foundRect = Locate(scanArea); if (foundRect == null) return; // stop the recursion. Rectangle rightArea = new Rectangle(foundRect.X + foundRect.Width, foundRect.Y, (scanArea.X + scanArea.Width) – (foundRect.X + foundRect.Width), (scanArea.Y […]

C#填充多边形的一侧

在c#中,我可以在位图图像中填充多边形,如下所示。 using (Graphics g = Graphics.FromImage(bitmap)) { g.FillPolygon(colorBrush, points.ToArray()); } FillPolygon方法填充多边形内的像素,在这种情况下,白色像素和黑色像素保持不变。 现在,我想要与此操作相反。 这意味着,外部像素将被填充,内部像素将保持不变。 在这种情况下,黑色像素是外部像素。 编辑我需要这个,因为我要说,我有一个对象的二进制图像。 我需要用背景颜色(黑色)剪切像素,白色多边形内的像素将保持不变。

将隐藏的消息写入图像文件c#

我正在寻找一个教程,其中描述了如何使用C#将隐藏文本写入/读取到图像文件中,但遗憾的是我发现了关于此的任何好post,所以我决定在这里询问这个小技巧。 假设我有一个名为test.jpg的图像文件,有没有办法在这个文件中写一个像“Hello word”这样的隐藏文本? 我已经阅读了有关图像元数据的内容,我想我应该尝试以某种方式编写这个元数据,但我不知道如何找到。 如果有人知道该怎么做,请帮助我理解如何做到这一点。 谢谢。

更快的方法来循环图像

有谁知道如何更快地完成这项工作? 我可以使用Lockbits做同样的事吗? for (int y = 0; y < picture.Height; y++) { for (int x = 0; x 230) && (colorPixel.R < 20) && (colorPixel.G < 20) && (colorPixel.B < 20)) { //do something } 谢谢。

.net图像编辑器控件

我正在寻找一个允许编辑图像的.net控件。 以下function是可取的: 作物 放大 钢笔 线 刷 圈 多边形 完全撤消/重做 测量工具 图层(不重要) 此控件可以是Winforms或WPF,但需要是可扩展的。 我很高兴它成为一个商业控制或开源。 如果源代码也可用,则需要C#。

高斯平滑配方应用

如何将guassian平滑公式应用于arrays中的图形? 这些数组映射到一种颜色并绘制在图表上。 我想要使​​用guassian平滑后的线性渐变颜色.. 我也想知道确切的guassian平滑配方。

如何将Bitmap转换为byte 更快?

我写了函数: public static byte[, ,] Bitmap2Byte(Bitmap image) { int h = image.Height; int w = image.Width; byte[, ,] result= new byte[w, h, 3]; for (int i = 0; i < w; i++) { for (int j = 0; j < h; j++) { Color c= image.GetPixel(i, j); result[i, j, 0] = cR; result[i, j, 1] […]

如何在C#或VB.NET中确定图像是否为灰度?

首先 首先,请注意,此问题中给出的答案对所有灰度图像都不起作用,并且还注意到在另一个问题中接受的答案根本没有解释如何确定图像是否为灰度图像,但无论如何它不符合我的需求,因为它似乎只涵盖JPEG和TIFF图像,并假设它们将具有EXIF元数据及其中的必需字段。 (我无法理解为什么人们确定我链接的第一个问题是我所链接的第二个问题的“重复”……) 最后, 这个最后接受的答案缺乏一个工作和演示的代码示例,但无论如何都无济于事,因为作者使用Bitmap.GetPixel()函数引用了缓慢且弃用的方法,但我们应该使用Bitmap.LockBits()函数而是为了获得更高的性能优势。 情景 我有一些GIF,JPG,BMP和PNG图像,我需要确定它们是灰度图像还是不是灰度图像。 对于GIF文件,我只关心分析第一帧。 我对图像的数据结构,像素颜色位和那些东西没有多少经验/意识,我只知道非常基础。 所以,如果我错过了重要的信息,我应该提供我将要测试的图像的任何信息,那么请问我,但无论如何要考虑到我想为“所有”类型的图像创建一个通用的解决方案,好吧,不是全部,但至少这些格式:BMP,JPG,GIF和PNG。 在提到的那些图像格式中,我的最高优先级是GIF图像,我将意味着如果能够确定GIF图像是否为灰度的方法不能用于分析其他类型图像的方法,那么我将接受仅涵盖GIF图像像素处理的答案。 题 我认为我的需求很明确:我如何确定图像是否为灰度? 如果它根本不清楚,为了避免我可以做到你可以浪费你的时间: 该解决方案必须至少适用于GIF图像。 (记住,我只关心GIF中的第一帧),但如果提供的解决方案对BMP,JPG和PNG也有效,那么它当然总是更好。 该解决方案必须关注PixelFormat.Format32bppRgb灰度图像。 解决方案一定不能使用Bitmap.GetPixel()函数,而必须使用Bitmap.LockBits() 。 我不是要求解释,伪代码也没有关于图像结构/格式/像素等文档的外部链接,我要求一个有效的代码示例(当然,如果作者覆盖图像结构/像素技术,总是更好提供除代码之外的基本解释)。 在C#或VB.NET中,选择并不重要。 研究 这是我到目前为止所做的。 我试图理解确定图像是否为灰度的点,我也不确定我的条件是否与bytesPerPixel变量一致,以及我的RGB值分配是否正确,因为我从一开始就说我不是图像处理专家所以我可能错过了重要的事情…… VB.NET Public Shared Function IsImageGrayScale(ByVal img As Image) As Boolean Select Case img.PixelFormat Case PixelFormat.Format16bppGrayScale Return True Case Else Dim pixelCount As Integer = (img.Width * img.Height) Dim bytesPerPixel As Integer […]

在C#中生成巨大的图像

我需要使用PixelFormat.Format24bppRgb编码创建一个巨大的图像(aprox 24000 x 22000)。 我知道打开它几乎是不可能的…… 我想要做的是: Bitmap final = new Bitmap(width, height, PixelFormat.Format24bppRgb); 正如预期的那样,抛出exception,因为我无法以这种方式处理内存中的11GB文件。 但我有一个想法:我可以在生成文件时编写文件吗? 所以,我不会在RAM上工作,而是在研究HD。 只是为了更好地解释:我有大约13K的瓷砖,我打算在这个愚蠢的文件中将它拼接在一起。 因为我可以按给定顺序迭代它们,所以我可以使用不安全的代码将其直接写入内存。 有什么建议?

查找图像中的子图像

我有一个相当简单的情况。 我只是不知道任何具体的搜索条件。 我有一个图像,在该图像中我有几个其他图像遵循基本模式。 它们是矩形,可能具有标志性图像,可以作为基础。 一个重要的部分是,我需要检测旋转/错误缩放的子图像。 基本上我需要做的是将“名片”从单个图像拆分为正确对齐的单个图像。 请原谅我糟糕的油漆技巧! http://yfrog.com/eaproblemjj由于我还在设计要扫描的卡片,我可以放入任何符号或其他可以使检测更容易的东西(正如我所说的那样具有里程碑意义)