[英]Read image from a path in sys.path inside a Python module
我對python和opencv世界很陌生。 我只是嘗試閱讀並顯示圖像,但總是收到錯誤消息:
錯誤:D:\\ Build \\ OpenCV \\ opencv-3.1.0 \\ modules \\ highgui \\ src \\ window.cpp:289:錯誤:(-215)size.width> 0 && size.height> 0在函數cv :: imshow中
我創建了一個名為test.py的模塊。 在該模塊中,我嘗試讀取系統路徑“ C:\\ cv \\ images”中的圖像“ car.png” ,並將其顯示如下:
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內容?
是什么讓您想象sys.path
設置會影響您從中讀取文件的目錄? 它僅用於查找要導入的Python模塊。 因此,要回答您的問題,您所看到的行為是正常且預期的。 如果您在dir
有一個目錄,在filename中有一個文件filename
那么您應該打開的文件將是
os.path.join(dir, filename)
所以你應該嘗試
im = cv2.imread(os.path.join(dir, filename))
那些對使用Python軟件包運送數據文件感興趣的人,可能比看pkgutil
軟件包的文檔pkgutil
。 特別是pkgutil.get_data
對於在安裝過程中放置數據文件的地方查找數據文件很有用。
我不確定您要在應用程序中做什么,但是sys.path
在示例代碼中似乎是多余的。 此外, sys.path
在Python文檔中說它是
字符串列表,指定模塊的搜索路徑
基本上, 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')
在查看了您所使用的Open CV版本的源代碼和內部加載函數之后 ,似乎imread
函數並未考慮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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.