2017-10-22 17 views
0

RGBイメージをグレーに変換するための小さなスクリプトを作成しました。 ターミナルフォームの現在のディレクトリ(python3 image.py)でスクリプトを実行すると、正常に動作します。Python OpenCV imwrite 0 bytesイメージは実行ディレクトリに依存

しかし、python3 proc/image.pyのように、私はそれをdirより下に置くと、0バイトサイズの結果イメージを作成します。ここ

image.py

import os 
import numpy as np 
import cv2 

def sw(name): 
    dir_path = os.path.dirname(os.path.realpath(__file__)) 
    img_path = os.path.join(dir_path, name) 
    print(img_path) 
    img = cv2.imread(name, 0) 
    rslt_path = os.path.join(dir_path, "schwarn_g.jpeg") 
    print(rslt_path) 
    cv2.imwrite(rslt_path, img) 
    return img 


if __name__ == "__main__": 
    sw('schwarn.jpeg') 

のコードである誰かが、この動作を説明できますか? ありがとう!

答えて

0

あなたは、次の行で作業するimage開いている:

sw('schwarn.jpeg') 

あなたは常にしようとしている:

img = cv2.imread(name, 0) 

そして、あなたのscript以降を常にこの行でfunctionを呼び出しますimgを開きます。scriptを実行しているディレクトリからschwarn.jpgを開きます。すべてのos.path参加が、画像がどこに出力されるのかに影響します。元の画像の読み取り先ではありません。

これは、プログラムがあなたがscriptを実行しているのと同じdirectoryimgを開こうとしているので、あなたがimgと同じディレクトリにscriptを実行しているとき、imgのみにロードすることがができることを意味します。したがって、別のdirectoryscriptを試して実行すると、imgを読み取ることができず、結果としてgreyscaleイメージに内容がありません。

+0

ありがとうございます。 'img_path = os.path.join(dir_path、name)'行から 'img_path = os.path.join(dir_path、img_path)'に変更されました。私はそれを見なかった。 – Max

+0

もう一度投票してください! –

関連する問題