matplotlib Line2D.set()获得意外的关键字参数“cmap”

eiee3dmh  于 2023-01-31  发布在  其他
关注(0)|答案(1)|浏览(923)

我试图运行一个代码,将视频划分为帧,同时过滤到灰度(使用线程),我得到了这个错误尝试运行我的代码:
文件"C:\用户\用户\PycharmProjects\ASCIIPICproject\venv\库\站点包\matplotlib\艺术家. py",第1160行,在_update_props中引发属性错误(属性错误:Line2D.set()获得意外的关键字参数"cmap"
这是我的代码(过滤线程的函数):

def saveFramesFiltered():
currentFrame = 0
framemax = 215

while currentFrame < framemax:
    while not os.path.exists("./framesBefore/frame" + str(currentFrame) + '.jpg'):
        time.sleep(0.01)
    lock.acquire()
    image = pltim.imread("./framesBefore/frame" + str(currentFrame) + '.jpg')
    lock.release()
    r, g, b = image[:, :, 0], image[:, :, 1], image[:, :, 2]
    grayImage = 0.299 * r + 0.587 * g + 0.114 * b
    plt.plot(grayImage, cmap="gray")
    plt.axis("off")
    lock.acquire()
    plt.savefig("./framesAfter/grayImage" + str(currentFrame) + ".jpg", bbox_inches='tight', pad_inches=0)
    lock.release()
    time.sleep(0.01)
w8f9ii69

w8f9ii691#

您的错误来自 * plt. plot(grayImage,cmap ="gray")*,您通常可以通过检查错误行自己找到此错误。Plot绘制的是曲线而不是图像,因此无法与色彩Map表关联。请尝试plt. imshow()
然后我会避免使用第二个while来检查你是否创建了文件,(你检查plt. savefig是否工作...)也许savefig返回一个参数,你可以检查。如果你不需要打开图像,你可以通过以下操作来赢得一些时间:

# a colormap and a normalization instance
cmap = plt.cm.jet
norm = plt.Normalize(vmin=data.min(), vmax=data.max())

# map the normalized data to colors
# image is now RGBA (512x512x4) 
image = cmap(norm(data))

# save the image
plt.imsave('test.png', image)

参见Saving an imshow-like image while preserving resolution
如果你真的想保留它,把它放在循环的末尾,而不是开头,这样更清楚,循环怎么通过第一次迭代?
我也不确定你的lock.acquire方法在你保存图像时是否需要?

相关问题