在我使用Apache2托管在Ubuntu上的python flask程序中,我编写的程序通常能够使用imread压缩和处理图像。即使文件路径正确且是现有文件且不返回任何错误消息,代码现在也无法访问该图像。这似乎发生在不依赖于文件类型的任何类型的图像上,如果与此问题相关,代码有时会返回none类型not SUBSPIPT able。提前谢谢你的帮助!守则:
img = cv2.imread(file_path)
height, width, _ = img.shape
roi = img[0: height, 0: width]
_, compressedimage = cv2.imencode(".jpg", roi, [1, 90])
file_bytes = io.BytesIO(compressedimage)
在我看来,您提供的文件路径可能不正确。我这样说是因为
cv2.imread
不会对不存在的文件路径抛出错误:相反,它不返回任何值:
(返回
True
)。您的代码将在img.shape
行失败。因此,您可以在提供给cv2.imread之前检查文件路径是否正确:或者你可以在做了
imread
之后,在继续之前assert img is not None
编辑:
我看到您声称您已经检查了文件路径是否正确以及文件是否存在。但是你自己也在说
这是因为
img[0: height, 0: width]
您试图在其中索引/下标None您可以检查,如果键入
None[0]
,是否会得到相同的错误TypeError: 'NoneType' object is not subscriptable
。因此,我仍然觉得图像路径不正确,或者它不是有效的图像文件(除了列出的here扩展名外,还有其他扩展名)。在这两种情况下,都会在imread
上得到一个None
由于您提供的代码片段是大型应用程序的一部分,因此问题可能出现在其他地方,例如文件路径有时有效,有时无效?我只是在猜测这一点
您不能期望
cv2.imshow()
在flask
或apache
内工作当}和其他变量)
apache
启动时,它通常会将用户切换到名为www
的用户和组,这样它就不会像从屏幕前的终端运行某个东西一样拥有相同的环境(PATH
、HOME
{如果您将Python模块添加到自己的用户中,
www
用户甚至没有安装相同的Python模块它也没有一个
tty
可以应用cv2.waitKey()
来判断您是否按了某个键,例如退出它也没有权限在你的屏幕上画画,甚至不知道你是谁,或者你坐在可能连接的屏幕/会话中的哪一个
可以考虑查看logging模块来调试/监视脚本,然后在^ {< CD12>}及其^ {< CD13>}和^ {CD14>}之前记录图像路径及其文件大小。
相关问题 更多 >
编程相关推荐