2016-04-25 13 views
1

私はcv2.imread機能を使用してイメージを読み込むPythonのツールボックスで作業しています。cv2.imreadはjpgファイルを読み込みません

私は.pngファイルで作業していますが、同じフォルダから.jpgファイルを読み込みたい場合はNoneTypeを返します。

  1. どうしてですか?どうすれば修正できますか?
  2. サブフォルダから画像を読み取るにはどうすればよいですか?

おかげ

import sys 
import numpy as np 
import os 
sys.path.append("/usr/local/lib1/python2.7/site-packages") 
import cv2 
im1=cv2.imread('pic1.png') 
print im1.shape 
#output: (512, 512, 3) 
im2=cv2.imread('pic1.jpg') 
print im2.shape 
#output: 
------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
<ipython-input-8-2d36ac00eca0> in <module>() 
----> 1 print im2.shape 
AttributeError: 'NoneType' object has no attribute 'shape' 


print cv2.getBuildInformation() 

Media I/O: 
ZLib:      /lib64/libz.so (ver 1.2.8) 
JPEG:      /lib64/libjpeg.so (ver 80) 
WEBP:      /lib64/libwebp.so (ver encoder: 0x0202) 
PNG:       /lib64/libpng.so (ver 1.6.17) 
TIFF:      /lib64/libtiff.so (ver 42 - 4.0.2) 
JPEG 2000:     /lib64/libjasper.so (ver 1.900.1) 

二つの絵は私のホームフォルダにあります。

enter image description here

from os import getcwd, listdir, path 
    current_dir = getcwd() 
    files = [f for f in listdir('.') if path.isfile(f)] 
    print(('Current directory: {c_dir}\n\n' 
     'Items in the current directory:\n {files}').format(
     c_dir=current_dir, 
     files=str.join('\n ', files))) 
    #Output: 
    Items in the current directory: 
    .node_repl_history 
    mysh.sh~ 
    test.sh 
    blender_tofile.sh 
    **pic1.jpg** 
    rapid.sh 
    matlab_crash_dump.8294-1 
    .gtk-bookmarks 
    any2any 
    beethoven.ply 
    Face.blend 
    Untitled1.ipynb 
    sphere1.pbrt 
    multirow.log 
    .Xauthority 
    .gtkrc-2.0-kde4 
    Theory and Practice.pdf 
    simple_example.gpx~ 
    pbrt.sh 
    blender.sh~ 
    Untitled4.ipynb 
    java.log.3414 
    kinect_test.py 
    matlab_crash_dump.7226-1 
.bashrc~~ 
.ICEauthority 
infoslipsviewer.desktop 
GTW_Global_Numbers.pdf 
index.htm 
Untitled2.ipynb 
**pic1.png** 



os.access('pic1.jpg', os.R_OK) 
#output: 
True 
+1

'print cv2.getBuildInformation()'の出力をチェックして、ライブラリがJPEGをサポートして構築されているかどうかを確認してください。 –

+0

'os.access( 'pic1.jpg'、os.R_OK)'をチェックし、戻り値を教えてください – wim

+0

'pic1.png'が複数のディレクトリに存在する可能性があるので、PNGを開くことが成功します間違った場所で探している? –

答えて

2

何かがcv2のビルドではオフになっています。ソースから再構築するか、パッケージマネージャーから入手してください。代わりに、回避策として

、matplotlibのでロードJPEGファイル:

>>> import cv2 
>>> import matplotlib.pyplot as plt 
>>> a1 = cv2.imread('pic1.jpg') 
>>> a1.shape 
(286, 176, 3) 
>>> a2 = plt.imread('pic1.jpg') 
>>> a2.shape 
(286, 176, 3) 

注OpenCVのとmatplotlibのは、(1がRGBであり、1はBGR)で、デフォルトでは、異なるカラーチャンネルを読んでいること。

>>> a2 = a2[..., ::-1] # RGB --> BGR 
>>> (a2 == a1).all() 
True 
それ以外

cv2.imreadplt.imreadをJPEGファイルに同じ結果を返す必要があります:あなたがすべてで色に依存しているのであれば、あなたはこのように、第一および第三のチャンネルを入れ替えた方が良いです。それらは両方とも3チャンネルのuint8 numpy配列にロードされます。

+0

@win 例外はありません!たぶん私のビルドcv2のバグは、知らない!!!!? – Ali

+0

@win cv2を再構築させてください。ご注意いただきありがとうございます:-) – Ali

関連する問題