簡體   English   中英

從Python模塊內sys.path中的路徑讀取圖像

[英]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.pathPython文檔中說它是

字符串列表,指定模塊的搜索路徑

基本上, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM