

別のファイルから関数を呼び出すと画像が開けなくなります。呼び出さなかったら無事に実行できます。  
呼び出してくる関数には、一切OpenCVは使用していません。

[code]

    from pathlib import Path
    import cv2
    以下の関数を呼び出してくると画像が開けない
    #from classfy02 import input_data
    
    def main():
        parent_path = Path(__file__).parent
        path = str(
            (parent_path / 'cross.png').resolve()
        )
    
    
        img = cv2.imread(path)
        cv2.namedWindow('screen', cv2.WINDOW_NORMAL)
        cv2.setWindowProperty('screen', cv2.WND_PROP_FULLSCREEN, 
        cv2.WINDOW_FULLSCREEN)
        cv2.imshow('screen', img)
        cv2.waitKey(1000)
    
    if __name__ == '__main__':
        main()
    
[/code]

エラー内容は以下のようになります。

[code]

    OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /Users/travis/build/skvark/opencv-
    python/opencv/modules/highgui/src/window.cpp, line 325
    Traceback (most recent call last):
    File "path.py", line 15, in <module>
    cv2.imshow('screen', img)
    cv2.error: /Users/travis/build/skvark/opencv-
    python/opencv/modules/highgui/src/window.cpp:325: error: (-215) size.width>0 && size.height>0 in function imshow
    
[/code]

原因は何だと考えられるでしょうか。  
よろしくお願い致します。


CC BY-SA 3.0
2018-01-19T03:16:52.673
41078
2019-10-29T17:03:36.283
2019-10-29T17:03:36.283
19110
27060
question
python python3 opencv
PythonのOpenCVを用いる時にほかのファイルから関数を呼び出してくると画像が表示できなくなる


質問には「以下の関数を呼び出してくると画像が開けない」と書かれていますが、

[code]

    #from classfy02 import input_data
    
[/code]

は、関数の呼び出しではなくて、モジュールのimportです。  
なので、起きているのは「"classfy02モジュールのinput_dataをインポートする"と画像が開けなくなる」という問題だと考えられます。

＝

起きているエラー「OpenCV Error: Assertion failed (size.width>0 && size.height>0)
」は、OpenCVの何らかのfunctionが実行された際に使われた画像が異常(幅もしくは高さが0か負値)であったため、Assertion(前提として満たしているべき条件)が満たされなかった事を示しています。

＝

これらから推測されるのは、以下のようなシナリオです。  
・cv2モジュールにinput_dataというfunctionが含まれている  
・cv2モジュールのinput_dataは画像データの読み込みに使われている  
・"from classfy02 import
input_data"によって、input_dataはcv2モジュールのinput_dataではなくclassfy02モジュールのinput_dataを意味するようになった  
・cv2モジュールで画像データの読み込みの際に、classfy02モジュールのinput_dataが使われた為、画像データの読み込みが失敗した  
・画像データの読み込みが失敗した（取得された画像は空）ので、Assertionが満たされなかった

＝

上記シナリオが正しいかどうかは、  
"from classfy02 import input_data"  
の代わりに  
"from classfy02 import input_data as input_data_classfy02"  
を行えば判ります。

"from classfy02 import input_data as
input_data_classfy02"のようにclassfy2のinput_dataを別名(input_data_classfy02)でimportすれば、input_dataでcv2のinput_dataが使われるようになり、画像データが読み込めないという問題が起きないはずですから。

試してみてください。


CC BY-SA 3.0
2018-01-19T08:01:18.770
41085
2018-01-19T08:01:18.770
217
41078
answer