我是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内容?
答案 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 documentation和source 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});