由于您想首先对绘图进行颜色检测,因此您需要将绘图转换为 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://stackoverflow.com/a/3380739/17315172
https://stackoverflow.com/a/58641662/17315172
中的想法
我愿意接受此代码中的任何更正和建议。