2013-07-30 799 views
4

cv2.imread總是返回NoneTypecv2.imread總是返回NoneType

我使用Python版本2.7和OpenCV 2.4.6在64位Windows 7

也許是某種錯誤或權限問題的,因爲在另一臺計算機完全相同的安裝Python和CV2包的正常工作。這裏是代碼:

im = cv2.imread("D:\testdata\some.tif",CV_LOAD_IMAGE_COLOR) 

我從http://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv下載了OpenCV。任何線索將不勝感激。

+0

嘗試使用cv2.imread(r「D:\ testdata \ some.tif」,CV_LOAD_IMAGE_COLOR)。 r將字符串轉換爲「原始字符串」,它不會轉義特殊字符,因此您會看到更合理的結果。這是因爲默認情況下,python字符串接受某些特殊的「轉義序列」。例如,'\ n'是一個新行。有關更多詳細信息,請參見:http://docs.python.org/2/reference/lexical_analysis.html。也看看路徑是否存在。 –

+0

import os print os.path.exists(r'D:\ testdata \ some.tif')。看看路徑是否存在。刪除R,我相信它不會工作。 –

回答

3

它確實可能是尚未解決的OpenCV bugcv2.imread在Win32下無法正常工作。

與此同時,使用LoadImage,它應該工作正常。

im = cv2.cv.LoadImage("D:\testdata\some.tif",CV_LOAD_IMAGE_COLOR) 
-1

我碰到過這個問題。原來PIL模塊提供了這個功能。 同樣,numpy.imread和scipy.misc.imread雙方並不存在,直到我安裝PIL

在我的配置(WIN7 python2.7),即如下進行:

cd /c/python27/scripts 
easy_install PIL 
4

嘗試改變斜線

im = cv2.imread("D:/testdata/some.tif",CV_LOAD_IMAGE_COLOR) 

或加上R到字符串的開頭的方向

im = cv2.imread(r"D:\testdata\some.tif",CV_LOAD_IMAGE_COLOR) 
2
>>> im=cv2.imread("C:\Users\Virgile\Downloads\red.JPG") 
>>> print im 
None 

>>> im=cv2.imread("C:/Users/Virgile/Downloads/red.JPG") 
>>> print im 
[[[ 15 36 51] 
    [ 18 34 51] 
    [ 19 33 51] 
    ..., 

(與OpenCV的3.0.0測試)

0

這花了很長的時間來解決。首先確保文件在目錄中,並檢查即使Windows資源管理器顯示文件是「JPEG」,但實際上是「JPG」。第一個打印語句是確保文件確實存在的關鍵。我是一個初學者,所以如果代碼糟透了,那就這樣吧。代碼,只是導入一張圖片並顯示它。如果代碼找到該文件,則True將打印在python窗口中。

import cv2 
import sys 
import numpy as np 
import os 

image_path= "C:/python27/test_image.jpg" 
print os.path.exists(image_path) 



CV_LOAD_IMAGE_COLOR = 1 # set flag to 1 to give colour image 
CV_LOAD_IMAGE_COLOR = 0 # set flag to 0 to give a grayscale one 
img = cv2.imread(image_path,CV_LOAD_IMAGE_COLOR) 
print img.shape 
cv2.namedWindow('Display Window') ## create window for display 
cv2.imshow('Display Window', img) ## Show image in the window 
cv2.waitKey(0) ## Wait for keystroke 
cv2.destroyAllWindows() ## Destroy all windows 
0

我有一個類似的問題,改變斜線的方向努力

2

在這一個只是偶然。

該解決方案非常簡單,但不直觀。

  • 如果使用相對路徑,則可以使用「\」或「/」作爲test\pic.jpgtest/pic.jpg分別如果使用絕對路徑
  • ,只應在/.../test/pic.jpg使用「/」爲UNIX或C:/.../test/pic.jpg用於窗戶
  • 爲了安全起見,只需使用for root, _, files in os.walk(<path>):結合abs_path = os.path.join(root, file)。之後致電imread,如​​總是會起作用。
0

我花了一些時間在這隻發現這個錯誤是由我的情況下一個破碎的圖像文件造成的。所以請手動檢查您的文件,以確保它是有效的,並可以由常見的圖像查看器打開。