imread在Spyder中有效,但在VS Code中无效

时间:2019-08-08 12:18:04

标签: python opencv visual-studio-code imread

为什么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 ===================================== 以及由于混乱而删除的更多信息。

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

2 个答案:

答案 0 :(得分:2)

我相信问题出在两个IDE中工作目录的配置上。既然如此,我们知道VS Code看不到faces.jpg,您只需为其提供文件的完整路径,然后检查其是否正常运行。

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

答案 1 :(得分:1)

作为对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 Folder File> Open File

如果您打开一个文件夹,则该文件夹将成为您当前的工作目录-即使您从另一个文件夹中打开另一个单独的文件,这正是我在这种情况下所做的...

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

https://code.visualstudio.com/docs/python/debugging#_set-configuration-options的文档将帮助任何人略微地做到这一点。上面概述的行为在这里进行了解释:

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

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

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