首页 > 解决方案 > 从记事本++和OpenCV函数执行python代码时出错

问题描述

这是一段简单的代码,可以从命令行毫无问题地执行(Python Anaconda 3.5):

import cv2
image = cv2.imread('image.jpg')
a=image.shape[0]
b=image.shape[1]
print("image size " + str(a) + " by " + str(b))

当它运行时,你会得到预期的:

image size 3254 by 4928

但是,当从 notepad++ 7.8.1、Windows 7) 运行时,我得到:

Traceback (most recent call last):
  File "C:\Users\Me\Desktop\test.py", line 3, in <module>
    a=image.shape[0]
AttributeError: 'NoneType' object has no attribute 'shape'

C:\Program Files (x86)\Notepad++>

这似乎很奇怪。Notepad++ 中 python 的快捷方式位于“shortcuts.xml”中的 C:\Users\Me\AppData\Roaming\Notepad++ 中。这是:

 <Command name="python_35" Ctrl="no" Alt="no" Shift="no" Key="0">cmd /K python &quot;$(FULL_CURRENT_PATH)&quot;</Command>

关于为什么这可能不起作用的任何想法?如果我输入'cmd /K python',我会得到蟒蛇版本的python(我想知道我是否在我的系统上看到了另一个版本的python)。这在读取图像时不会失败,所以我认为 OpenCV 仍在加载中。

标签: pythonopencvnotepad++

解决方案


解决方案:

这个问题似乎解决了这个问题:

从 Notepad Plus Plus 和当前目录运行文件

cmd /k cd /d $(CURRENT_DIRECTORY) && python $(FULL_CURRENT_PATH)

令人困惑的问题是错误是由尝试访问 image.shape[0] 引起的。如果图像不存在,则 imread 不会发生错误;即image=cv2.imread('imagexyz.jpg'),但是当你尝试访问'image'时会发生这种情况。应该首先检查图像是否存在,即:

import cv2
image = cv2.imread('image_not_there.jpg')
if(image is None):
    print("no image")
else:
    a=image.shape[0]
    b=image.shape[1]
    print("image size " + str(a) + " by " + str(b))

推荐阅读