当前位置: 首页 > 知识库问答 >
问题:

用高度图像替换区域的颜色

姬飞昂
2023-03-14

共有1个答案

苏鸿才
2023-03-14

我会尽力帮助马克完成任务。我使用ImageMagick和一些unix代码,如下所示,并使用ImageMagick的连接组件标记(-connected-components)。

下面是图像中所有颜色的简单连接组件结果:

convert in-1.png \
-define connected-components:verbose=true \
-connected-components 4 \
null:

Objects (id: bounding-box centroid area mean-color):
  0: 256x256+0+0 133.6,134.1 50820 srgb(255,255,255)
  1: 86x40+23+30 65.5,49.5 3440 srgb(0,127,70)
  6: 60x40+42+126 71.5,145.5 2400 srgb(0,127,70)
  4: 86x27+22+80 64.5,93.0 2322 srgb(0,38,255)
  5: 86x27+121+121 163.5,134.0 2322 srgb(0,127,70)
  2: 37x40+127+59 145.0,78.5 1480 srgb(0,127,70)
  3: 36x40+177+59 194.5,78.5 1440 srgb(0,127,70)
  7: 41x32+89+186 109.0,201.5 1312 srgb(255,106,0)


请注意,您的green(即srgb(0,127,70)的高度都不超过40。所有人都是40岁,一个是27岁。为了演示,让我们得到所有大于30的框。

htval=30
convert in-1.png in-1_result.png
bboxArr=(`convert in-1.png \
-define connected-components:verbose=true \
-connected-components 4 \
null: | grep "srgb(0,127,70)" | sed 's/^[ ]*//' | cut -d\  -f2 | tr "x" "+"`)
num=${#bboxArr[*]}
for ((i=0; i<num; i++)); do
ht=`echo ${bboxArr[$i]} | cut -d+ -f2`
xx=`echo ${bboxArr[$i]} | cut -d+ -f3`
yy=`echo ${bboxArr[$i]} | cut -d+ -f4`
if [ $ht -gt $htval ]; then
convert in-1_result.png -fill black -draw "color $xx,$yy floodfill" -alpha off in-1_result.png
fi
done
null: | grep "srgb(0,127,70)" | sed 's/^[ ]*//' | cut -d\  -f2 | tr "x" "+"`)


可以替换为

null: | awk '/srgb\(0,127,70\)/ && sub(/x/, "+") {print $2}'

附加:

这里有一个更紧凑的方法,使用awk进行所有的过滤,并将输出保存为颜色x,y floodfill。则只需要一个draw命令来进行处理。

convert in-1.png in-1_result.png
floodfill_arr=(`convert in-1.png \
-define connected-components:verbose=true \
-connected-components 4 \
null: | awk '/srgb\(0,127,70\)/ && sub(/[x]/, "+") && split($2, arr, "+") {if (arr[4]>30) {print " color " arr[3] "," arr[4] " floodfill"}}'`)
echo "${floofill_arr[*]}"

color 42,126 floodfill color 121,121 floodfill color 127,59 floodfill color 177,59 floodfill

convert in-1_result.png -fill black -draw "${floodfill_arr[*]}" -alpha off in-1_result.png
 类似资料:
  • 如何用image Magick替换图像矩形区域内的颜色? 下面是输入和输出图像的示例,我使用Adobe Photoshop生成这些图像,方法是选择一个矩形区域(包含网格区域),并执行命令:并选择要替换为灰色的黑色。 注意,绿色跟踪可以具有任何形状和颜色(黑色除外),绿色像素覆盖了黑色像素,因此是不可能的。 我知道如何替换整个图像中的颜色,像这样: 但是上面用灰色替换了所有的黑色,甚至是黑色文本,比

  • 问题内容: 我想替换图像的颜色。例如,将所有蓝色变为红色而形状没有任何变形。当我尝试这样做时,我可以通过迭代每个像素来交换颜色,但是交换区域的形状变为平坦的形状。 example1输入:http: //www.tutorialwiz.com/tutorials/changing_color/images/original.jpg example1输出:http : //www.tutorialwi

  • 问题内容: 编辑Png图像例如,更改特定区域并在该区域填充颜色。 我想更改仅图像选择区域的颜色。就像第一个用户选择一种颜色,然后他选择一个图像一样,之后他可以用所选颜色更改图像颜色的特定区域。 之后,他也可以保存该图像,这可能吗?像Color公司的网站使用这种东西。 像下面的URL https://www.sherwin- williams.com/visualizer#/active 问题答案:

  • 问题内容: 这是我想出的一小段代码的自我问答。 当前,没有一种简单的方法可以嵌入SVG图像,然后可以通过CSS访问SVG元素。有多种使用JS SVG框架的方法,但是如果您要做的只是制作带有过渡状态的简单图标,它们将过于复杂。 所以这就是我想出的,我认为这是迄今为止在网站上使用SVG文件的最简单方法。它的概念来自早期的文本到图像替换方法,但据我所知,从未对SVG进行过处理。 这是问题: 如何在不使用

  • 这是我想出的一段方便的代码的自我问答。 目前,还没有一种简单的方法来嵌入SVG图像,然后通过CSS访问SVG元素。使用JS SVG框架的方法多种多样,但如果您所做的只是制作一个带有滚动状态的简单图标,那么这些方法就过于复杂了。 所以这里是我想出的,我认为这是迄今为止在一个网站上使用SVG文件的最简单的方法。它的概念来自早期的文本到图像的替换方法,但据我所知,SVG从来没有这样做过。 这就是问题所在

  • 使用下面的代码,我可以在加载到画布中的图像上绘制一个区域,并用一些颜色填充绘制的区域。 现在,我需要用图像而不是颜色填充绘制区域。比如: 帆布fillStyle='url(myimage.jpg)'; 而不是 帆布fillStyle='#123456'//填充颜色示例 HTML: jquery。拉票。min.js