CV2.imread()Python图像未加载且未显示错误

2024-04-26 12:44:19 发布

您现在位置:Python中文网/ 问答频道 /正文

在我使用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)

Tags: 文件代码图像程序类型imgubuntuwidth
2条回答

code sometimes returns a none type

在我看来,您提供的文件路径可能不正确。我这样说是因为cv2.imread不会对不存在的文件路径抛出错误:

img = cv2.imread("/non/existent/image.jpeg")

相反,它不返回任何值:

img is None

(返回True)。您的代码将在img.shape行失败。因此,您可以在提供给cv2.imread之前检查文件路径是否正确:

assert os.path.isfile(file_path)

或者你可以在做了imread之后,在继续之前assert img is not None

编辑:

我看到您声称您已经检查了文件路径是否正确以及文件是否存在。但是你自己也在说

the code sometimes returns a none type is not subscript able

这是因为img[0: height, 0: width]您试图在其中索引/下标None

您可以检查,如果键入None[0],是否会得到相同的错误TypeError: 'NoneType' object is not subscriptable。因此,我仍然觉得图像路径不正确,或者它不是有效的图像文件(除了列出的here扩展名外,还有其他扩展名)。在这两种情况下,都会在imread上得到一个None

由于您提供的代码片段是大型应用程序的一部分,因此问题可能出现在其他地方,例如文件路径有时有效,有时无效?我只是在猜测这一点

您不能期望cv2.imshow()flaskapache内工作

  • apache启动时,它通常会将用户切换到名为www的用户和组,这样它就不会像从屏幕前的终端运行某个东西一样拥有相同的环境(PATHHOME{}和其他变量)

  • 如果您将Python模块添加到自己的用户中,www用户甚至没有安装相同的Python模块

  • 它也没有一个tty可以应用cv2.waitKey()来判断您是否按了某个键,例如退出

  • 它也没有权限在你的屏幕上画画,甚至不知道你是谁,或者你坐在可能连接的屏幕/会话中的哪一个

可以考虑查看logging模块来调试/监视脚本,然后在^ {< CD12>}及其^ {< CD13>}和^ {CD14>}之前记录图像路径及其文件大小。

相关问题 更多 >