- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
简而言之,我想找出具有主要颜色的像素的坐标。
具体来说,我想实现以下目标:
找到主要颜色。我所说的主要是指图像中大多数像素都具有的颜色(我使用直方图实现了它)
在获得这种颜色(在我的例子中是黑色)之后,我想找到一个黑色的像素并且它周围只有黑色像素。基本上,黑色最集中区域的中心。
到目前为止,我只能得到主色。
convert src.png -format %c histogram:info: > x.txt
cat x.txt | awk '{print $1}' | sed 's/://g' > x1.txt
h=$(sort -n x1.txt | tail -1)
cat x.txt | grep "$h"
rm -rf x.txt
结果:
169211: ( 0, 0, 0,255) #000000 black
现在,我也可以获得黑色的所有坐标
convert src.png txt: | grep black
469,799: ( 0, 0, 0,255) #000000 black
470,799: ( 0, 0, 0,255) #000000 black
471,799: ( 0, 0, 0,255) #000000 black
472,799: ( 0, 0, 0,255) #000000 black
473,799: ( 0, 0, 0,255) #000000 black
474,799: ( 0, 0, 0,255) #000000 black
475,799: ( 0, 0, 0,255) #000000 black
476,799: ( 0, 0, 0,255) #000000 black
477,799: ( 0, 0, 0,255) #000000 black
478,799: ( 0, 0, 0,255) #000000 black
...
但是我需要一个黑色像素的随机坐标,它位于周围只有黑色像素的地方...
我使用的是 Linux 和 Imagemagick 版本 6.6.5
最佳答案
首先,找到您的主打颜色。你似乎已经知道如何做到这一点,所以我跳过这一步。
(我也没有为此检查或验证您的代码...)
您的代码有一些弱点:
您只清理 x.txt
,而不是您的 x1.txt
。
您应该从第二个命令中删除 | sed 's/://g'
部分。它从您的变量中消除了 :
冒号,但这可能导致 h=21
(而不是 h=21:
)导致您的 grep "$h"
找到所有此类行:
1: (221, 86, 77) #DD564D srgb(221,86,77)
1: (221,196,192) #DDC4C0 srgb(221,196,192)
1: (221,203,197) #DDCBC5 srgb(221,203,197)
[...]
21: (255,255,255) #FFFFFF white
如果您将其保留在 h=21:
,您将找到您要查找的那一行! (验证示例:使用内置的 rose:
图像代替您的 src.png
看看我的意思。)
其次,在图像上应用非常少量的模糊,方法是对每个位置的每个像素及其周围的 8 个像素进行平均:-blur 1x65535
(此操作使用 3x3方形内核)。在该步骤之后,在生成的图像中,只有那些像素将保持纯黑色,而在原始图像中它们仅被黑色像素包围。
第三,将所有非黑色像素变为白色:通过对图像应用
-fill white +opaque black
-fill white -opaque black
-operation。 (另请参见 "Morphology" ,尤其是 "Erosion" 。)这通过将所有非黑色颜色变为白色来丢弃图像中的所有其他颜色,并简化您对纯黑色像素的搜索。 (注意:这不适用于这样的 src.png 文件,它们不包含至少一个 3x3 像素区域和纯黑色像素...)
第四:我们必须考虑图像边界上的像素(这些像素没有 8 个邻居!),因此我们使用 -virtual-pixel none
将颜色“无”分配给这些像素.
我将使用 ImageMagick 内置的名为“logo:”的特殊图片来演示我的方法:
convert logo: logo.png
如您所见,这张图片以白色为主色。 (因此我将此示例的代码切换为使所有白色像素变为黑色...)
到目前为止的命令行:
convert \
logo: \
-virtual-pixel none \
$(for i in {1..2}; do echo " -blur 1x65535 "; done) \
-fill black \
-opaque white \
2_blur-logo-virtpixnone.png
这是并排的 2 张图片:
第五步: 皮革,冲洗,重复。
现在让我们对该算法再进行几次迭代,例如 100、500、1000 和 1300,同时对结果应用注释,以便我们知道哪个图像是哪个:
for j in 100 500 1000 1300; do
convert \
logo: \
-virtual-pixel none \
$(for i in $(seq 1 ${j}); do echo " -blur 1x65535 "; done) \
-fill black \
-opaque white \
-gravity NorthEast -annotate +10+10 "$j iterations" \
${j}_blur-logo-virtpixnone.png
done
如您所见,我的算法使黑色区域汇聚到您在查看原始 logo.png
时凭直觉猜测为白色区域“中心”的那个点:
一旦您得到一张没有黑点的输出图像,您的迭代次数就太频繁了。返回一个迭代。 :-)
现在应该只有非常有限的候选像素符合您的标准。
关于imagemagick 获取具有最常见颜色的像素的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11942398/
我正在阅读 java swing,但在理解它时遇到问题。 Color 是一个类吗? Color[] col= {Color.RED,Color.BLUE}; 这在java中是什么意思? 最佳答案 Is
我正在研究用 python 编写的 pacman 程序。其中一个模块是处理吃 bean 游戏的图形表示。这当然是一些主机颜色。列表如下: GHOST_COLORS = [] ## establishe
本网站:http://pamplonaenglishteacher.com 源代码在这里:https://github.com/Yorkshireman/pamplona_english_teache
我最近将我的手机更新为 Android Marshmallow 并在其上运行了我现有的应用程序,但注意到颜色行为有所不同:将更改应用到 View (可绘制)的背景时,共享相同背景的所有 View (引
所有 X11/w3c 颜色代码在 Android XML 资源文件格式中是什么样的? I know this looks a tad ridiculous as a question, but giv
试图让 ffmpeg 创建音频波形,同时能够控制图像大小、颜色和幅度。我已经尝试过这个(以及许多变体),但它只是返回无与伦比的 "。 ffmpeg -i input -filter_complex "
我很好奇你是否有一些关于 R 中颜色酿造的技巧,对于许多独特的颜色,以某种方式使图表仍然好看。 我需要大量独特的颜色(至少 24 种,可能需要更多,~50 种)用于堆叠区域图(所以不是热图,渐变色不起
我看到的许多 WPF 示例和示例似乎都有硬编码的颜色。这些指南 - http://msdn.microsoft.com/en-us/library/aa350483.aspx建议不要硬编码颜色。在构建
我想更改文件夹的默认蓝色 如何设置? 最佳答案 :hi Directory guifg=#FF0000 ctermfg=red 关于Vim NERDTree 颜色,我们在Stack Overflow上
是否有关于如何将任意字符串哈希为 RGB 颜色值的最佳实践?或者更一般地说:3 个字节。 你问:我什么时候需要这个?这对我来说并不重要,但想象一下任何 GitHub 上的那些管图 network pa
我正在尝试将默认颜色设置为自定义窗口小部件。 这是有问题的代码。 class ReusableCard extends StatelessWidget { ReusableCard({this.
import javax.swing.*; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.Ta
我有一个 less 文件来定义一堆颜色/颜色。每个类名都包含相关颜色的名称,例如 .colourOrange{..} 或 .colourBorderOrange{..} 或 navLeftButtOr
我有一个RelativeLayout,我需要一个黑色背景和一个位于其中间的小图像。我使用了这段代码: 其中@drawable/bottom_box_back是: 这样我就可以将图像居中了。但背
我需要设置 浅色 的 JPanel 背景,只是为了不覆盖文本(粗体黑色)。 此刻我有这个: import java.util.Random; .... private Random random =
我正在尝试制作一个自定义文本编辑器,可以更改特定键入单词的字体和颜色。如何更改使用光标突出显示的文本的字体和/或颜色? 我还没有尝试过突出显示部分。我尝试获取整个 hEdit(HWND) 区域并更改字
我想改变我整个应用程序的颜色。 在我的 AndroidManfiest.xml 中,我有正确的代码: 在 values 文件夹中,我有 app_theme.xml: @style/MyAc
是否可以使用 android 数据绑定(bind)从 xml 中引用颜色? 这很好用: android:textColor="@{inputValue == null ? 0xFFFBC02D : 0
有没有办法在 Android 应用程序中设置“空心”颜色? 我的意思是我想要一个带有某种背景的框,而文本实际上会导致背景透明。换句话说,如果整个 View 在蓝色背景上,文本将是蓝色的,如果它是红色的
我用CGContextStrokePath画在白色背景图片中的一条直线上,描边颜色为红色,alpha为1.0画线后,为什么点不是(255, 0, 0),而是(255, 96, 96)为什么不是纯红色?
我是一名优秀的程序员,十分优秀!