python中是不是有一个函数可以确定图中指定点的颜色?

Posted

技术标签:

【中文标题】python中是不是有一个函数可以确定图中指定点的颜色?【英文标题】:Is there a function in python to determine the color of a specified point in a plot?python中是否有一个函数可以确定图中指定点的颜色? 【发布时间】:2021-12-17 04:10:37 【问题描述】:

如果提供了坐标,我需要 matplotlib 中的函数来提取点的颜色或颜色值。我打算做的是:

import matplotlib.pyplot as plt
x=int(input("x coordinate: "))
y=int(input("y coordinate: "))
plt.plot(x,y,color='blue')
c=plt.<extract_color_function>(x,y) #this must store the color(as a String)/colour value(as a tuple)
if c=='black':
   <do something>
else:
   <do something>

这里, 是我需要的。 pyplot 模块中有这样的东西吗?如果没有,您能推荐一些替代方案吗?

【问题讨论】:

plt.plot 返回一个 Artist 对象。它将视觉信息存储为属性 【参考方案1】:

由于您想首先对绘图进行颜色检测,因此您需要将绘图转换为 RGB 格式的图像。所以要做到这一点,我们首先需要从缓冲区中抓取图像并将其转换为 3D 数组。对于这个过程,我们需要 ioopencv

import matplotlib.pyplot as plt
import cv2
import io
import numpy as np

figsize = #some figsize you want
fig = plt.figure(figsize = figsize)
ax = fig.add_subplot(111)
x=int(input("x coordinate: "))
y=int(input("y coordinate: "))
ax.plot(x,y,color='blue')

buf = io.BytesIO()
fig.savefig(buf, format = 'png', dpi = 180 )
buf.seek(0)
img_arr = np.frombuffer(buf.getvalue(), dtype = np.uint8 )
buf.close()
img = cv2.imdecode(img_arr,1)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB )

这会将您的绘图转换为 RGB 3D 图像,该图像存储为 img 中的 numpy 数组。请注意,我没有在函数中保留此转换,唯一的原因是此处理完成一次,然后多次使用输出。您可以将它放在函数中,但不建议这样做,因为从您的函数中我可以看到您将多次使用它进行颜色检测。因此,请少量执行此处理并多次检查结果。

您的提取函数将获取此 3D 数组,获取点 x,y 的 RGB 值并将其转换为十六进制颜色代码。

def rgb_to_hex(x,y):
   rgb = ( img[x,y,0], img[x,y,1], img[x,y,2] )
   return ( "#%02x%02x%02x" % rgb )

这将返回您可以检查“黑色”的十六进制代码

c = rgb_to_hex(x,y)
if c == '#000000':
  pass
else
  pass

注意:您可以省略十六进制转换,因为您可以直接检查为特定单元格的颜色创建的元组。

最后必须注意,如果 x,y 相对于不是图像左上角的原点。我的代码中使用的 x,y 绝对是左上角的原点。

我的回答结合了 https://***.com/a/3380739/17315172 https://***.com/a/58641662/17315172

中的想法

我愿意接受此代码中的任何更正和建议。

【讨论】:

【参考方案2】:

我认为您必须切换到 SVG,因为与在 python 中使用 matplotlib 相比,它更易于使用。

【讨论】:

以上是关于python中是不是有一个函数可以确定图中指定点的颜色?的主要内容,如果未能解决你的问题,请参考以下文章

确定一个函数在 Python 模块中是不是可用

hdu1054最小顶点覆盖

无向图中求两定点之间所有路径。图用二维数组存储。最好用c语言、给我解题思路也行。谢谢

请问,最小正周期指的是啥?在函数图中表示那一段?最好有图片说明

图的相关知识

在情节(python)中 - 是不是可以将子图放在子图中