删除图像中的白边 C#
我正在寻找一种在我收到的扫描中检测和裁剪图像的方法.图片是扫描的一种形式,结果还包含扫描盖的白色背景. 有什么建议我可以自动做到这一点? 解决方案 在这种扫描情况下有一种算法(示例): https://github.com/rajbot/autocrop 它不是C#,但是在没有明显困难的情况下迁移大部分应该很简单. 也有一种较简单的算法,可能适合您在.net中编写的.NET的需求:
2 2024-04-26
编程技术问答社区
使用Lockbits的边缘检测 C#
我制作了一个实现边缘检测算法的程序, 但是需要很长时间才能处理. 我已经阅读了有关使用Lockbits和不安全状态而不是GetPixel和SetPixel的信息,但我仍然不明白如何使用它. 这是我的示例代码: private Bitmap SobelEdgeDetect(Bitmap original) { Bitmap b = original; Bitmap bb = original; int width = b.Width; int height = b.Height; int[,] gx = new int[,] { { -1, 0, 1 }, { -2, 0, 2 }, { -1, 0, 1 } }; int[,] gy = new int[,] { { 1, 2, 1 }, { 0, 0, 0 }, {
0 2024-04-25
编程技术问答社区
带有WriteableBitmapEx的Sobel运算和卷积运算
因此,我正在使用Windows RT上的应用程序使用WritableBitmapex.我正在尝试使用SOBEL操作员在图像上实现边缘检测.我已经使用.convolute()成功地将两个内核用于X和Y检测到图像,但是现在我将两个图像添加到一个图像中. 问题是,两个图像的所有像素似乎都具有透明度0的值0(因此A in argb中的A).我可以独自显示这两个图像而没有问题,但是添加它们只给了我黑色图片. 所以我的问题是: 为什么卷积后每个像素的透明度设置为0? 为什么我仍然可以显示图像而不会全黑? 当我添加两个图像时为什么会变黑? 是否有更好的方法将两个图像结合在一起?闪电战不幸似乎并不支持这种像素添加.但是foreach确实很慢... 对于Calrification,这是我到目前为止的代码.我可以显示WBMPY和WBMPX,但FinalBMP完全是黑色的. public int[,] sobelY = new int[3, 3] { { 1, 2, 1 },
0 2024-04-21
编程技术问答社区
关于C#的边缘检测
我有这样的黑白图像(颜色叠加是我的,可以去除): 我需要弄清楚显示的手的边缘,我该怎么做? 我当前的算法: List edgePoints = new List(); for (int x = 0; x
2 2024-04-21
编程技术问答社区
最快的Sobel边缘检测 C#
我想制作一个实现SOBEL边缘检测的程序. 这是我的代码: private Bitmap SobelEdgeDetect(Bitmap ori) { Bitmap b = original; Bitmap bb = original; int width = b.Width; int height = b.Height; int[,] gx = new int[,] { { -1, 0, 1 }, { -2, 0, 2 }, { -1, 0, 1 } }; int[,] gy = new int[,] { { 1, 2, 1 }, { 0, 0, 0 }, { -1, -2, -1 } }; int[,] allPixR = new int[width, height]; int[,] allPixG = new int[width, height];
2 2024-04-20
编程技术问答社区
视频编程中边缘过滤器的更好算法
我仍在研究上一个程序尽管我终于发现了如何解决问题(关于如何过滤最大轮廓),但我现在有一个新问题,或者是一个问题. 您可以看到,我正在使用Canny算法来搜索视频中的边缘.但是我将用于检测的对象没有特殊的颜色,因此当对象的颜色与周围的颜色大致相同时(例如,如果对象为银,背景是白色),则对象的边缘将消失,我无法获得对象的轮廓. 目前,我将测试OpenCV中可用的每种边缘过滤算法,但是要缩短工作,我需要您的帮助来推荐最好(或至少更好)算法,而不是Canny .现在我已经测试了SOBEL,但结果并不比Canny的索贝(Canny)更好.如果可能的话,请将我链接到一些很好的例子以供参考. 代码: int main( int argc, char** argv ) { CvCapture *cam; CvMoments moments; CvMemStorage* storage = cvCreateMemStorage(0); CvSeq* contours = NULL;
0 2024-04-06
编程技术问答社区
模糊的边缘检测
我几乎没有图像处理和识别的背景知识.我试图在灰度图像(例如肖像)上检测主要边缘/灰度过渡.问题在于,在某些部分,边缘被模糊(由于焦点).我正在使用具有多个阈值的Canny Edge探测器,但我永远无法检测到这些边缘(下巴,衣服,耳朵,脸部的侧面,...) ) 原始图像: 这是我得到的结果:胡须,尖锐的边缘 边缘检测是正确的工具吗? 谢谢! 更新:在边缘检测前使用DERICHE滤波并将图像的大小减半(使用Aperturesize = 7),我使它的工作非常接近我想要的功能. 解决方案 使用Canny-deriche过滤器您可以找到: 完整代码为在这里 其他解决方案 几乎不可能检测到这些边缘,因为它们被模糊了. 边缘检测通过分析周围像素中颜色的快速变化而起作用.模糊使像素平滑,这会使变化少得多,因此未检测到边缘. 您可以在边缘检测之前尝试使用强额锐化过滤器,但是,对于这种模糊,边缘检测无法正常工作. 即使您提出了边缘检测参数也可以检测到这些模糊
6 2024-04-01
编程技术问答社区
精美边缘检测器的时间复杂性
我目前正在撰写有关一种新的隐志算法的研究论文.我在算法中的某个时刻使用了Canny Edge探测器.在论文中,我需要写入新方法的时间复杂性,这又取决于Canny Edge检测器的时间复杂性. 问题是,在网络上,我无法找到有关Canny时间复杂性的任何参考.我什至读过原始的精美纸.我无法正确推断出来,在这里需要一些帮助. 解决方案 Canny Edge检测由 组成 图像的卷积与模糊内核, 图像与边缘检测器内核的四次卷积, 梯度方向的计算, 非最大抑制作用, 滞后阈值, 步骤(1),(2),(3)和(4)均根据图像的卷积来实现,其内核具有固定尺寸的内核.使用FFT,可以在时间O(n log n)中实现卷积,其中n是元素的数量.如果图像具有M×N尺寸,则这些步骤的时间复杂度为O(Mn log Mn). 最后一步可以通过后处理图像来删除所有高和低值,然后丢弃所有其他不接近其他像素的像素.这可以在时间o(mn)中完成. 因此,总体时间复杂性为O(Mn l
6 2024-03-30
编程技术问答社区
检测具有圆角的卡片的边缘
嗨,我目前正在开发一个OCR阅读应用程序,在该应用程序中,我可以通过使用AvFoundation Framework成功地捕获卡片图像. 对于下一步,我需要找出卡的边缘,以便我可以从主捕获的图像中裁剪卡片图像,然后我可以将其发送到OCR引擎进行处理. 现在主要的问题是找到卡的边缘,我正在使用以下代码(取自另一个开源项目),该代码将OpenCV用于此目的.如果卡是纯矩形卡或纸张,则可以正常工作.但是,当我使用带有圆角的卡(例如驾驶执照)时,它无法检测到.另外,我在OpenCV上没有太多专业知识,任何人都可以帮助我解决这个问题吗? - (void)detectEdges { cv::Mat original = [MAOpenCV cvMatFromUIImage:_adjustedImage]; CGSize targetSize = _sourceImageView.contentSize; cv::resize(original, origin
4 2024-03-21
编程技术问答社区
用于iPhone的无标记AR lib
我正在搜索iPhone的功能性AR无标记库(从3GS,至少支持iOS 4.3). 我已经测试过大量的SDK,包括高通AR,layar,artoolkit,但它们都不满足我的需求. 更确切地说,我不需要基于本地化的AR技术(Layar),也不需要标记技术(ArtoolKit). 如果可能的话,图书馆必须是免费的,因为我没有太多的财务资源. 解决方案 Qualcomm(QCAR)最近将iOS版本发布到了Beta中.因此,如果这是为什么它不满足您的需求,现在可能. junaio's胶水也提供了一种简单的"无标记"解决方案 - /junaioglue 字符串也有免费且便宜的许可证 - http://www.poweredbystring.com/>但是字符串目标需要具有较高的对比矩形边框. 全部沉浸和元的其他SDK相当昂贵 - 或者是我最后一次检查的. 如果iOS的QCAR可以正常工作,那可能是您最好的选择.
2 2024-03-19
编程技术问答社区
安卓系统中的Sobel边缘检测
作为我为Android开发的应用程序的一部分,我想向用户展示他们拍摄的图像的边缘检测版本(类似于下面的示例). 为了实现这一目标,我一直在研究Sobel运营商以及如何在Java中实施它.但是,我发现的许多示例都使用了AWT中找到的对象和方法(像这个示例)那不是Android的一部分. 我的问题确实是,Android是否提供了上述示例中使用的AWT功能的任何替代方案?如果我们要使用Android内置的库来重写该示例,我们将如何处理? 解决方案 由于您没有Android中的BufferedImage,因此您可以自己执行所有基本操作: Bitmap b = ... width = b.getWidth(); height = b.getHeight(); stride = b.getRowBytes(); for(int x=0;x
18 2024-02-03
编程技术问答社区
使用OpenCV进行彩色背景的边缘检测
我正在使用以下代码来检测给定文档的边缘. private Mat edgeDetection(Mat src) { Mat edges = new Mat(); Imgproc.cvtColor(src, edges, Imgproc.COLOR_BGR2GRAY); Imgproc.GaussianBlur(edges, edges, new Size(5, 5), 0); Imgproc.Canny(edges, edges, 10, 30); return edges; } 然后,我可以通过从中找到最大的轮廓来从此edges中找到文档. 我的问题是我可以从以下图片中找到文档: 但不是以下图片: 如何改善此边缘检测? 解决方案 我使用python,但主要想法是相同的. 如果您直接执行cvtcolor:bgr-> grey for img2,则必须失败.因为灰色使很难区分区域: 相关答案: 如
12 2024-01-28
编程技术问答社区
在一个边/顶点的列表中寻找所有不重叠的多边形
我有一个边缘列表和顶点列表.每个边缘参考两个顶点,每个顶点都保持边缘列表. 我想找到从此图产生的所有非重叠多边形. 一个例子是 0,0)(4,0)(4,2)(4,4)(2,4)(2,2)(4,2)(6,2)(6,6)(0,0,, 6)(0,0) 此路径应描述每个唯一的边缘,并在某些角度上发生碰撞.在实际图中,顶点是不同的.我需要的两个多边形是(0,0)(4,0)(4,2)(2,2)(2,4)(4,4)(4,2)(6,2) (6,6)(0,6)和(2,2)(2,4)(4,4)(4,2) 解决方案 好吧,我在想... 特别感兴趣的唯一顶点是具有两个以上边缘的顶点.要查找具有两个以上边缘的所有顶点,就是o(n).然后,找到小便的闭环与在给定顶点处的边缘和另一个边缘之间的最小theta相同(如果顶点为ccw,这是从当前边缘顺时针方向的最小角度).为了找到所有最紧密的闭环,我需要在一个顶点上检查所有边缘边缘对,其中边缘计数大于2.这是迹线的初始化.从那时起,痕
6 2024-01-23
编程技术问答社区
开始学习边缘检测/图像识别的最佳文章
我参与了一个个人项目,该项目需要对边缘检测和图像细分/对象识别的广泛了解. 我知道在编写代码之前计划/理解的重要性,考虑到这一点,最佳起点是学习这些计算领域的重要性?理想情况下,我正在寻找在线文章/论文. 谢谢 解决方案 我发现Christian Graus对代码项目的系列有用: 图像用于使用C#和GDI+ part 1- parter+ part 1- parter+ part 1-一个> c#和gdi+ part 2 -part 2-卷积过滤器的假人的图像处理> 带有C#和GDI+ GDI+第3部分的假人的图像处理+第3部分 - 边缘检测过滤器 c#和gdi+ part 4 -birinarear exterters和bimize evalers and jupsize extering y -biarinear exterters and birinarear exterters and Evalize evallinear extressing c
2 2024-01-23
编程技术问答社区
如何使用Chamfer Matching算法来寻找'相似的图像';
我想索要有关如何使用匹配算法(边缘匹配算法)的更多信息来查找"相似"图像.我想知道是否可以为匹配的结果放置一个"得分". 解决方案 匹配匹配算法基本上计算两个图像之间的距离(相似度).基本思想是: 提取查询图像的边缘/轮廓以及目标图像. 在查询图像中以一个点/像素为单位,并在目标图像中找到最接近点/像素的距离. 总和查询图像的所有边缘点/像素的距离. 这给出了倒角距离,即两个图像之间的不相似性值.值越低的结果.但是,如果目标图像大于查询映像,则必须照顾缩放和滑动窗口. 您可以在OpenCV \模块\ contres. 上找到工作检查.
0 2024-01-22
编程技术问答社区
jQuery工具提示检测屏幕边缘
我有一些基本的悬停/工具提示代码工作,需要修改,以便当工具提示击中浏览器窗口的边缘时添加第二类名称.谁能伸出手? this.tooltip = function () { $(".challenge_card").hover(function (e) { $(this).parent().append(" "); $("#tooltip") .fadeIn("fast"); }, function () { $("#tooltip").remove(); }); }; 解决方案 var wW = $(window).width(); var $tooltip = $('#tooltip'); if($tool
18 2024-01-17
编程技术问答社区
在C#中检测摄像机图像中的一个物体
我有一个来自实时网络摄像头的图像,我希望能够检测图像中的特定对象并提取其部分进行一些处理. 具体来说,图像将是一个游戏板,假设出于这个问题的目的,它是一个Sudoku游戏板. 我最初的方法是寻找对比区域并从那里进行处理,但是我似乎最终得到了很多潜在的边缘(许多错误),没有真正的线索我实际上想要! 是否有任何算法,库,代码样本,甚至只是那些关于我如何查找和提取图像相关部分的好主意? 解决方案 使用免费 aforge.net 图像处理库.有很多很酷的东西可以玩. 其他解决方案 您需要在图像上执行过滤器操作和掩盖. 我认为,没有简单的方法仅从图像中获取对象,您需要使用边缘检测算法,剪切并为有效对象/image设置标准. . 您还可以使用图像阈值来检测对象.您可能需要查看以下图像处理库. 其他解决方案 (我想许多可能的)方法之一: 从给定的图像中找到一个"获取/计算"直线(边缘等)的过滤器. 现在,您拥有所有行的集合(阵列)(Xst
4 2024-01-03
编程技术问答社区
边缘检测和去除
我是图像处理的新手.我正在开发一个Web应用程序.我需要拍摄图像(免费手绘)并删除其部分.例如,拍摄猫的图像并删除除眼睛以外的所有东西. P.S->我正在开发一个基于图像游戏的身份验证系统.它要求用户选择与密码共同关联密码的图像,我会通过检测边缘并删除其部分并将其作为提示存储并向他展示,以便仅对他有意义,而不是对他而言,而不是对他而言,则我将其变形.攻击者. 解决方案 我没有整个代码,但是我使用定义的方法(http://www.pixastic.com/lib/docs/actions/actions/edges2/)完成了边缘检测.使用帆布方法 去除零件 其他解决方案 边缘检测是通过称为卷积的过程完成的.定义了各种卷积矩阵,其中之一是边缘检测.您将不得不查看所有这些,以及如何在Java中进行卷积:请参阅Java.awt.image.convolveop开始.然后您如何删除"除了"是另一个问题.
20 2023-11-29
编程技术问答社区
opencv结构化森林的边缘检测和查找轮廓
我正在尝试通过Visual C ++使用OpenCV来提取图像的轮廓.我能够使用opencv >用于FindContours. FindContours在两个步骤中工作 使用Canny Edge检测器检测边缘. 将Canny的输出喂入FindContours. 我想与'Mat src = imread("image.jpg"); src.convertTo(src, CV_32F, 1.0 / 255.0); Mat edges(src.size(), src.type()); Ptr pDollar = createStructuredEdgeDetection("model.yml.gz"); pDollar->detectEdges(src, edges); findContours(edges, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Po
18 2023-11-20
编程技术问答社区
VHDL信号的边缘检测
我是新的VHDL,我有一个按钮,我想在按下IT信号时检测到它,这意味着我想在按下信号按钮的升高边缘? 我进行了研究,我发现的所有内容都是关于检测clk的升高边缘的 . 我遇到的问题是,按下按钮时,按下按钮的信号将达到1,直到另一个直到另一个人甚至发生,所以当按下按钮的信号升高时,我会更感兴趣? 解决方案 您的惯用英语问题: 我是VHDL的新手,有一个我想检测到的按钮 按下时边缘上升. 我做了一些研究,我发现的一切都是关于检测的 时钟的上升边缘. 按下按钮时,按下按钮的信号到达 '1'并保持在" 1",直到发生另一个事件. 如何检测按钮上升边缘事件? 这不是一个VHDL问题,而是一个数字设计问题. VHDL在实现VHDL中实现解决方案. 请参阅Sonicwave对问题的回答按钮事件提供边缘检测器. 但是,可能会发生开关反弹,以数十毫米(Switch Bounce上的Maxim Web文章)可能会生成多个事件,是转换依赖性和纠正措施也取
6 2023-11-18
编程技术问答社区