2011-11-14 2 views
1

perl을 사용하여 주어진 이미지의 특정 영역에서 색상을 샘플링하는 방법 (색상 또는 색상 범위를 아는 방법)이 있습니까? 200X200 이미지가 있고 X : 15 영역에서 색상을 샘플링하려고한다고 가정 해 보겠습니다. Y : 30; 이것을 할 수있는 방법이 있습니까? 아니면 쉽게 구현할 수있는 기존 모듈이 있습니까 (특히 이미지에서 샘플링 할 영역이 많고 많은 이미지가있는 경우).Perl을 사용하여 이미지의 색상 샘플링

감사합니다.

프레드

+1

가능한 해결책 : http://stackoverflow.com/questions/3681415/perl-imagemagick-getting-color-values-by-pixel – Mark

답변

2

먼저 색상 공간을 이해하지 못한다는 것을 알리십시오. 그러나 GD을 사용하면 비트 맵에서 여러 개의 픽셀을 쉽게 가져올 수 있습니다.

#!/usr/bin/env perl 

use strict; 
use warnings; 

use GD; 

my $img = GD::Image->new('Palisades-woods.jpg'); 

my ($width, $height) = $img->getBounds; 

my $sample_left = $width/2 - 10; 
my $sample_top = $height/2 - 10; 
my $sample_width = my $sample_height = 20; 

my $n = 0; 
my $avg = 0; 

for my $y (0 .. $sample_height - 1) { 
    for my $x (0 .. $sample_width - 1) { 
     my ($r, $g, $b) = $img->rgb($img->getPixel($x, $y)); 
     my $rgb = ($r << 16) + ($g << 8) + $b; 
     $avg = ($n * $avg + $rgb)/($n + 1); 
     $n += 1; 
    } 
} 

printf "Average rgb is #%06X\n", $avg; 
관련 문제