从Python模块

时间:2016-08-01 13:50:07

标签: python python-3.x opencv

我是python和opencv世界的新手。我只是想读取并显示图像,但我总是收到错误:

  

错误:   d:\构建\的OpenCV \的OpenCV-3.1.0 \模块\ highgui \ SRC \ window.cpp:289:   错误:(-215)size.width> 0&&函数cv :: imshow

中的size.height> 0

我创建了一个名为test.py的模块。在该模块中,我尝试阅读&#34; car.png&#34; 中的图片,该图片位于我的系统路径&#34; C:\ cv \ images&#34; < / strong>并显示如下:

import cv2;
import sys;


sys.path.append('C:\\cv\\images');

im = cv2.imread('car.png');
cv2.imshow('Car Figure',im);
cv2.waitKey(0);

当我调试代码时,我可以看到im变量从未被初始化,这就是我得到错误代码的原因。但是,当我在解释器中键入sys.path时,它显示路径已经添加了多次我尝试运行我的模块。当我直接在解释器中复制/粘贴模块内容时,代码工作正常并显示图像。

似乎在模块内部,没有考虑sys.path并且python无法读取图像。

不知道这是不是正常的行为,还是我应该在我的模块中做些什么来让解释器读取sys.path内容?

2 个答案:

答案 0 :(得分:2)

是什么让您认为sys.path设置会影响您从中读取文件的目录?它纯粹用于定位Python模块以供导入。所以要回答你的问题,你所看到的行为是正常的和预期的。如果您在dir中有一个目录,并且filename中有一个文件名,那么您应该打开的文件将是

os.path.join(dir, filename)

所以你应该试试

im = cv2.imread(os.path.join(dir, filename))

那些对使用Python软件包发送数据文件感兴趣的人可能会比查看pkgutil软件包的文档更糟糕。特别是,pkgutil.get_data对于在安装过程放置的任何位置查找数据文件非常有用。

答案 1 :(得分:1)

我不确定您在应用程序中尝试做什么,但sys.path在示例代码中似乎是多余的。此外,sys.path sys.path表示它是

  

指定模块搜索路径的字符串列表

基本上,sys.path用于加载模块本身而不是模块内的文件。

变量永远不会被初始化,因为它没有加载图像。这种解决方法在文件加载之前强制import sys import cv2 sys.path.append('C:\\users\\xxxx\\pictures\\') loaded = False for rel in sys.path: im = cv2.imread(rel+'image.jpg') if im is not None: loaded = True cv2.imshow('Car Figure',im) cv2.waitKey(0) if loaded == False: raise Exception('Couldn\'t load image') ,工作正常但不优雅,传统或必要:

imread

查看Python documentationsource code查看您正在使用的Open CV版本后,似乎sys.path函数不考虑Mat imread( const String& filename, int flags ) { /// create the basic container Mat img; /// load the data imread_( filename, flags, LOAD_MAT, &img ); /// return a reference to the data return img; }

main = struct('err',{1:6,5:10,1:6,1:6},'seg_err',{1:6,5:10,1:6,5:10});