【问题标题】:imread works in Spyder but not in VS Codeimread 在 Spyder 中有效,但在 VS Code 中无效
【发布时间】:2019-08-08 12:18:04
【问题描述】:

为什么imread 在 Anaconda Spyder 中工作,但在 Anaconda VS Code 中生成 None

  1. 卸载 VS Code 并重新安装。
  2. 禁用了 Microsoft python 扩展,希望能使用 Anaconda 扩展。
  3. cv2.GetBuildINformation()检查了CV2安装
  4. 使用
  5. 检查当前路径在 VS Code 中是否仍然相同
import os 
print(os.path.dirname(os.path.realpath(__file__)))

import cv2
import numpy as np
print(cv2.getBuildInformation())

import os 
dir_path = os.path.dirname(os.path.realpath(__file__))
print(dir_path)

img = cv2.imread("faces.jpg",1)
print(img)

img 打印为 None - 但仅在 VS Code 中。

路径打印正常。 python版本为3.6.4。

cv2.getBuildInformation() 返回:

General configuration for OpenCV 3.4.2 ===================================== 以及由于混乱而删除的更多信息。

任何有用的建议将不胜感激。 谢谢

【问题讨论】:

  • 我只是把这段代码放在一个代码块中,它又被呈现为无格式文本。
  • 两个 IDE 打印出的路径一样吗? cv2信息呢?尝试添加一个简单的检查文件 faces.jpg 是否存在并在两个 IDE 中运行:os.path.isfile(filepath)
  • d:\Documents\Dropbox\Machine Learning\OpenCV 在 VS Code 和 d:\Documents\Dropbox\Machine Learning\OpenCV 在 Spyder... print("文件是文件?" + str( os.path.isfile("faces.jpg"))) 在 Visual Studio Code 中返回 False,但在 Spyder 中返回 True!

标签: python opencv visual-studio-code imread


【解决方案1】:

我认为问题出在两个 IDE 中的工作目录的配置上。因为,我们知道 VS Code 看不到 faces.jpg,您只需向它提供文件的完整路径并检查它是否有效。

您可以使用os.getcwd() 来检查当前工作目录,然后相应地调整到faces.jpg 的相对路径。

【讨论】:

  • 是的,这是真的。谢谢你。我只是不明白为什么或如何让 VS Studio 使用相对路径。
  • 我应该重命名问题吗?
  • @LindsayFowler,我使用的是 PyCharm 而不是 VS Code,但我熟悉此类问题,因为我也使用 Spyder。如果项目目录的结构相同,则为设置中工作目录的配置。当您使用os 生成的路径时,您不再依赖此设置。
【解决方案2】:

作为对 Tim Mironov 的回应,我使用 os 库重写了我的代码以生成路径,这似乎更加健壮,因为它现在在两个 IDE 中都可以正常工作:

import os 
dir_path = os.path.dirname(os.path.realpath(__file__))
image_path = os.path.join(dir_path, "faces.jpg")
img = cv2.imread(image_path,1) 

现在为什么 VS Studio 有时找不到文件?这与 File>Open FolderFile>Open File

有关

如果您打开一个文件夹,那么该文件夹将成为您当前的工作目录——即使您从另一个文件夹中打开另一个单独的文件,这正是我在这种情况下碰巧做的......不太可能但肯定会发生在其他人身上.

您可以为您的文件添加配置,以促使 Python 使用您喜欢的任何文件夹。只需添加调试配置并编辑 launch.json

来自https://code.visualstudio.com/docs/python/debugging#_set-configuration-options 的文档将帮助任何有点粗略的人这样做。此处解释了上述行为:

"cwd 指定调试器的当前工作目录,它是代码中使用的任何相对路径的基本文件夹。 如果省略,默认为 ${workspaceFolder}(在 VS Code 中打开的文件夹)。"

代替默认选项 ${workspaceFolder},在 VS Code 的 launch.json 文件中使用 ${fileDirname} 将您当前的工作目录设置为您当前正在执行的 Python 脚本的文件夹: p>

{
    "name": "your_program.py",
    "type": "python",
    "request": "launch",
    "program": "${file}",
    "cwd": "${fileDirname}",
    "console": "integratedTerminal"
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    相关资源
    最近更新 更多