2011-11-14 28 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;