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>
这里,
【问题讨论】:
plt.plot
返回一个 Artist 对象。它将视觉信息存储为属性
【参考方案1】:
由于您想首先对绘图进行颜色检测,因此您需要将绘图转换为 RGB 格式的图像。所以要做到这一点,我们首先需要从缓冲区中抓取图像并将其转换为 3D 数组。对于这个过程,我们需要 io 和 opencv。
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中是不是有一个函数可以确定图中指定点的颜色?的主要内容,如果未能解决你的问题,请参考以下文章
无向图中求两定点之间所有路径。图用二维数组存储。最好用c语言、给我解题思路也行。谢谢