Imagemagick扩展图像边框

时间:2015-08-12 22:51:28

标签: imagemagick edge-detection

我正在寻找PHP Imagemagick的方法来检测图像的边缘,扩展边缘区域,并在其后面添加纯色。这是输入图像:

这将是预期的输出:

Imagemagick可以实现吗?

3 个答案:

答案 0 :(得分:3)

我认为这是可能的 - 这是我的方法。我相信它可以简化成一个单独的命令,但是在我突然想到它之前,让我们先看看你是否喜欢它。

我认为第一步是用黑色填充内部"孔" 。为此,我将其展平为黑色背景,使所有透明区域变黑,然后从左上角开始透明填充,以移除"偏离" 黑色。

convert -background black drop.png -flatten -fill none -draw 'color 0,0 floodfill' x.png

enter image description here

接下来,我需要为形态学做准备。要做到这一点,你经典地需要在黑色背景上的白色形状,所以让我们做其中之一。我将其展平到白色背景上,然后用黑色填充"外部" 区域。然后使青色区域变白的阈值。

convert -background white drop.png -flatten -fill black -draw "color 0,0 floodfill" -threshold 1% y.png

enter image description here

现在我想做一个拨号,扩展白色区域来制作你的边框,但是我可以使用EdgeOut形态方法确切地使用convert y.png -morphology edgeout disk:7 -negate -transparent white z.png 形态方法,而不是做一个拨号并找出原来的区别。那。然后我反转,所以白色肥胖区域变成你的黑色轮廓,并使白色区域透明,以便我可以在下一步叠加。

convert x.png z.png -composite result.png

enter image description here

现在,我需要做的就是将加肥边缘合成到步骤1的结果上。

$scope.songSearch = function (row) {
    var query = angular.lowercase($scope.query);
    if (query.indexOf(" ") > 0) {
        query_array = query.split(" ");
        search_result = false;
        for (x in query_array) {
            query = query_array[x];
            if (angular.lowercase(row.model1).indexOf(query || '') !== -1 || angular.lowercase(row.model2).indexOf(query || '') !== -1 || angular.lowercase(row.model3).indexOf(query || '') !== -1){
                search_result = true;
            } else {
                search_result = false;
                break;
            }
        }
        return search_result;
    } else {
        return (angular.lowercase(row.model1).indexOf(query || '') !== -1 || angular.lowercase(row.model2).indexOf(query || '') !== -1 || angular.lowercase(row.model3).indexOf(query || '') !== -1);
    }
};

enter image description here

答案 1 :(得分:0)

正如您提到的大纲有点粗略,我想到部署一个新工具来帮助您获得平滑的曲线 - potrace。基本上,它需要一个黑白PBM(或其他)格式文件并从中生成SVG - 它还可以生成EPS个文件等。所以在我下载之前请查看联机帮助页惊人的节目。无论如何,从我之前的解决方案开始,但是当你生成了outine文件y.png然后将其转换为像这样的黑白PBM文件并将其跟踪到平滑向量时,它会偏离它:< / p>

convert -background white z.png -flatten pbm:- | potrace -s -o curve.svg

您现在可以复合而不是我的&#34;略带锯齿&#34; 版本; - )

矢量文件看起来像这样 - 没有什么可以阻止你编辑它并改变填充和/或线条粗细,因为它只是ASCII。

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
 "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
 width="354.000000pt" height="477.000000pt" viewBox="0 0 354.000000 477.000000"
 preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.12, written by Peter Selinger 2001-2015
</metadata>
<g transform="translate(0.000000,477.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M2122 4313 c-32 -15 -290 -239 -405 -351 -117 -113 -438 -477 -502
-568 -226 -320 -268 -383 -348 -523 -38 -67 -124 -241 -170 -341 -63 -140
-138 -412 -157 -570 -19 -157 -7 -381 29 -540 30 -134 125 -358 194 -459 78
-114 268 -303 343 -341 16 -8 50 -27 76 -42 75 -43 258 -103 373 -123 98 -16
286 -17 395 -1 285 41 495 150 695 358 101 104 188 222 224 300 57 128 81 198
108 318 21 96 24 370 4 450 -22 92 -61 212 -83 260 -11 25 -27 60 -35 79 -20
47 -123 207 -202 316 -138 187 -368 530 -405 602 -33 66 -84 194 -91 230 -37
178 -43 271 -25 410 14 106 43 266 73 393 15 65 13 107 -7 129 -24 27 -49 31
-84 14z m33 -85 c-18 -83 -24 -108 -39 -183 -68 -334 -71 -447 -22 -675 11
-50 52 -157 89 -234 37 -77 141 -238 307 -476 45 -63 88 -126 98 -140 9 -14
22 -31 29 -38 7 -7 43 -59 80 -115 112 -171 170 -301 215 -487 19 -81 16 -355
-5 -450 -26 -114 -43 -165 -98 -288 -38 -82 -125 -198 -224 -297 -195 -194
-368 -281 -635 -321 -109 -16 -296 -15 -395 1 -113 19 -269 71 -343 113 -26
15 -59 33 -73 40 -68 35 -230 193 -301 293 -80 112 -170 318 -202 462 -33 143
-44 377 -26 527 17 140 79 378 127 490 9 19 22 51 30 70 107 247 278 533 491
820 49 66 50 68 137 170 224 268 443 489 660 668 22 18 54 44 70 57 17 14 32
25 34 25 2 0 0 -15 -4 -32z"/>
</g>
</svg>

答案 2 :(得分:0)

您可以从二进制图像开始,使用

创建一个透明的防眩边图像
convert uwtW3.png -morphology edgeout disk:7 -negate -blur 0x2 -level 50x100% \( +clone -negate \) -alpha off -compose copy_opacity -composite edge_transparent.png

enter image description here