我试图运行一个代码,将视频划分为帧,同时过滤到灰度(使用线程),我得到了这个错误尝试运行我的代码:
文件"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)
1条答案
按热度按时间w8f9ii691#
您的错误来自 * plt. plot(grayImage,cmap ="gray")*,您通常可以通过检查错误行自己找到此错误。Plot绘制的是曲线而不是图像,因此无法与色彩Map表关联。请尝试plt. imshow()
然后我会避免使用第二个while来检查你是否创建了文件,(你检查plt. savefig是否工作...)也许savefig返回一个参数,你可以检查。如果你不需要打开图像,你可以通过以下操作来赢得一些时间:
参见Saving an imshow-like image while preserving resolution
如果你真的想保留它,把它放在循环的末尾,而不是开头,这样更清楚,循环怎么通过第一次迭代?
我也不确定你的lock.acquire方法在你保存图像时是否需要?