cor*_*ion 7 wolfram-mathematica
我正试图找到一种在图像中寻找颜色的方法.这是一个简化的例子:
tree = ExampleData[{"TestImage", "Tree"}]
Run Code Online (Sandbox Code Playgroud)

我可以看到那里有蓝色,所以我想在像素海洋中的某个位置找到xy位置.假设我正在寻找特定的蓝色阴影,我可以提供一些近似的RGB值:
Manipulate[Graphics[{RGBColor[r, g, b], Disk[]}], {r, 0, 1}, {g, 0, 1}, {b, 0, 1}]
Run Code Online (Sandbox Code Playgroud)

现在我想找到一些具有该值或足够近的像素的坐标.Nearest也许能够做到:
Nearest[ImageData[tree], {0.32, 0.65, .8}]
Run Code Online (Sandbox Code Playgroud)
但不是 - 它"产生了非常大的输出"......
这样做的反面:
ImageValue[tree, {90, 90}]
Run Code Online (Sandbox Code Playgroud)
如果我已经有数字,那就没问题,或者可以点击图片.一旦我想要的颜色的位置已知,我就可以将其提供给需要"标记"的功能 - 例如RegionBinarize.
我觉得必须有Mathematica功能,但还是找不到它......
做这个
Position[#, First@Nearest[Flatten[#, 1], {0.32, 0.65, .8}]] &@
ImageData[tree]
(*
{{162, 74}}
*)
Run Code Online (Sandbox Code Playgroud)
做你想要的?
好的,试试这个:
tree = ExampleData[{"TestImage", "Tree"}];
dat = Reverse[ImageData[tree]\[Transpose], {2}];
dim = Dimensions[dat][[{1, 2}]];
nearfunc = Nearest[Join @@ dat -> Tuples @ Range @ dim];
Manipulate[
rgb = Extract[dat, Ceiling[p]];
posns = nearfunc[rgb, num];
Graphics[{
Raster[dat\[Transpose]], Red, Point[posns]
}],
{{p, {10, 10}}, Locator},
{{num, 20}, 1, 100, 1}
]
Run Code Online (Sandbox Code Playgroud)
这使您可以单击图像上的某个位置,确定与该点的颜色最接近(根据默认标准)的点数,并显示它们.num是要显示的点数.
它看起来像这样:
