(来源:googlepages.com)
在上图中,我想用红色标记Circle的边缘 像这样的东西
(来源:googlepages.com)
我不知道该怎么做,任何帮助/建议都会受到高度赞赏......
答案 0 :(得分:4)
快速而肮脏的解决方案。逐个像素地运行图像,如果颜色发生变化,只需将像素涂成红色。
PS:注意这可能不适用于正方形,除非你垂直和水平地做同样的
答案 1 :(得分:3)
只要您使用的是像您提供的二进制图像一样,形态过滤就会很有效。扩大图像,然后减去原始图像。
alt text http://img29.imageshack.us/img29/1420/morphf.png
这是一个MATLAB示例:
lImage = zeros(19, 19, 3);
lImage(7:13, 7:13, :) = repmat( ...
[0 0 1 1 1 0 0; ...
0 1 1 1 1 1 0; ...
1 1 1 1 1 1 1; ...
1 1 1 1 1 1 1; ...
1 1 1 1 1 1 1; ...
0 1 1 1 1 1 0; ...
0 0 1 1 1 0 0;], [1 1 3]);
figure; imshow(lImage);
lOutline = imdilate(lImage, strel('disk', 1)) - lImage;
lOutline(:, :, 2:3) = 0;
figure; imshow(lImage + lOutline);
答案 2 :(得分:2)
你几乎肯定想要使用Canny Edge Detector,它应该能够轻松地做到这一点。 My company的产品系列只包含这样一个工具,这是运行它的输出: alt text http://www.plinth.org/_images/image1Output.gif
答案 3 :(得分:1)
答案 4 :(得分:0)
您正在寻找的是边缘检测。您可以在Google上找到适用于常规算法的大量资源:
答案 5 :(得分:0)
我至少可以指向一些漂亮的边缘检测滤镜: http://www.codeproject.com/KB/GDI-plus/edge_detection.aspx
我想它应该很适合你
答案 6 :(得分:0)
从来没有做过这样的事情,但是复杂图像处理的强大工具是:
http://www.imagemagick.org/script/index.php
许多文档和示例 - 如果您不想调用可执行文件,还需要.NET包装器。
答案 7 :(得分:0)
有趣的问题 - 我假设你的例子中的'白色圆圈'实际上是另一个图像 - 这意味着你自己并没有画圆圈?
如果是这样,您可以扫描所有像素,找到至少在其一侧有黑色的白色像素(4个方向或8个角落)。如果匹配则将其交换为红色。如果没有,则忽略它。
我怀疑这是最好的方法,但如果它只是黑白,这可能会让你开始。
答案 8 :(得分:0)
有几种方法。
第一个是: - 你知道有一个圆圈,你需要找到中心的位置和半径。因此,您可以使用Hough transformation来查找这些内容,然后用红色绘制圆圈。 阅读this topic或this one
答案 9 :(得分:0)
最终你想要编辑图像的像素。 Marc Gravell已经在这里回答了这个问题。
然后,根据您选择的选项LockBits或GetPixel / SetPixel,您需要循环查看每像素颜色值。保持循环直到你碰到一个白色像素。
一旦你这样做,检查它周围的所有方向,如果你找到一个黑色像素,然后将该白色像素着色为红色。这当然是最简单的答案,并且有一些方法可以优化它,但它会起作用。
例如,如果您想将颜色更改为仅限于四个直接相邻的像素,则可以,而不是检查对角线。
答案 10 :(得分:0)
边缘检测?图像处理? OpenCV! lib有C#包装器。不是“简单”的解决方案,但是使用此lib获得的任何exp都是一个很好的简历构建器。如果你的公司正在进行图像处理,他们可能已经在使用它了。
答案 11 :(得分:-1)