2017-04-17 11 views
0

フォルダ内の多数の画像ファイルを読み込んで比較しようとしています。しかし、私はイメージファイルを読むことができません。Perlを使用してフォルダ内の画像を読み取って比較する

コードスニペット:

use strict; 
use warnings; 
use Image::Compare; 

opendir my $ref_dir, "./" or die "Cannot open directory: $!"; 
my @ref_files = readdir $ref_dir; 
closedir $ref_dir; 

print $#ref_files; 

my($cmp) = Image::Compare->new(); 


$cmp->set_image1(
     img => './'.$ref_files[0], #one instance - reading first file in the folder 
     type => 'bmp', 
    ); 

コードは、次のエラーを投げている - 「ファイルから画像データを読み取ることができません 『./。』:Cで 『./:許可を開くことができませんでした拒否されました』: /Perl64/site/lib/Image/Compare.pm 162. "

ファイル名を直接入力するとコードが正常に動作します。 - img => './image.bmp'。だから、それは許可の問題ではありません。

+0

'$ ref_filesの**パーミッション**を確認してください[0]'ファイル。 – AbhiNickz

+0

ファイル名を文字列として直接与えると動作します。したがって、許可の問題ではありません。 – Maximus

答えて

2

エラーメッセージはかなり明確です。

ファイルから画像データを読み取ることができません

「./。」:「./:許可を開くことができませんでした

を否定し、あなたが戻っopendir()から取得している最初のファイルが現在のディレクトリです( .) - Image :: Compareがそのファイルから必要な画像データを取得できないことは驚くことではありません!

おそらく、あなたはあなたが興味を持っているファイルを返すにフィルタを追加する必要があります。

my @ref_files = grep { -f } readdir $ref_dir; 
+0

ありがとうございます。問題は今修正されました – Maximus

関連する問題