Percentage difference between images: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) (Rename Perl 6 -> Raku, alphabetize, minor clean-up) |
|||
Line 59: | Line 59: | ||
Close (F1); |
Close (F1); |
||
Close (F2);</lang> |
Close (F2);</lang> |
||
=={{header|AutoHotkey}}== |
=={{header|AutoHotkey}}== |
||
{{works with | AutoHotkey_L}} |
{{works with | AutoHotkey_L}} |
||
Line 260: | Line 261: | ||
1.625587 |
1.625587 |
||
</pre> |
</pre> |
||
=={{header|C sharp|C#}}== |
|||
<lang Csharp>using System; |
|||
using System.Drawing; |
|||
class Program |
|||
{ |
|||
static void Main() |
|||
{ |
|||
Bitmap img1 = new Bitmap("Lenna50.jpg"); |
|||
Bitmap img2 = new Bitmap("Lenna100.jpg"); |
|||
if (img1.Size != img2.Size) |
|||
{ |
|||
Console.Error.WriteLine("Images are of different sizes"); |
|||
return; |
|||
} |
|||
float diff = 0; |
|||
for (int y = 0; y < img1.Height; y++) |
|||
{ |
|||
for (int x = 0; x < img1.Width; x++) |
|||
{ |
|||
Color pixel1 = img1.GetPixel(x, y); |
|||
Color pixel2 = img2.GetPixel(x, y); |
|||
diff += Math.Abs(pixel1.R - pixel2.R); |
|||
diff += Math.Abs(pixel1.G - pixel2.G); |
|||
diff += Math.Abs(pixel1.B - pixel2.B); |
|||
} |
|||
} |
|||
Console.WriteLine("diff: {0} %", 100 * (diff / 255) / (img1.Width * img1.Height * 3)); |
|||
} |
|||
}</lang> |
|||
=={{header|C++}}== |
=={{header|C++}}== |
||
Line 312: | Line 350: | ||
The difference of the two pictures is 1.62559 % ! |
The difference of the two pictures is 1.62559 % ! |
||
</pre> |
</pre> |
||
=={{header|C#}}== |
|||
<lang Csharp>using System; |
|||
using System.Drawing; |
|||
class Program |
|||
{ |
|||
static void Main() |
|||
{ |
|||
Bitmap img1 = new Bitmap("Lenna50.jpg"); |
|||
Bitmap img2 = new Bitmap("Lenna100.jpg"); |
|||
if (img1.Size != img2.Size) |
|||
{ |
|||
Console.Error.WriteLine("Images are of different sizes"); |
|||
return; |
|||
} |
|||
float diff = 0; |
|||
for (int y = 0; y < img1.Height; y++) |
|||
{ |
|||
for (int x = 0; x < img1.Width; x++) |
|||
{ |
|||
Color pixel1 = img1.GetPixel(x, y); |
|||
Color pixel2 = img2.GetPixel(x, y); |
|||
diff += Math.Abs(pixel1.R - pixel2.R); |
|||
diff += Math.Abs(pixel1.G - pixel2.G); |
|||
diff += Math.Abs(pixel1.B - pixel2.B); |
|||
} |
|||
} |
|||
Console.WriteLine("diff: {0} %", 100 * (diff / 255) / (img1.Width * img1.Height * 3)); |
|||
} |
|||
}</lang> |
|||
=={{header|Common Lisp}}== |
=={{header|Common Lisp}}== |
||
Line 746: | Line 747: | ||
'Lenna50.jpg' (+/@,@:|@:- % 2.55 * */@$@])&read_image 'Lenna100.jpg' |
'Lenna50.jpg' (+/@,@:|@:- % 2.55 * */@$@])&read_image 'Lenna100.jpg' |
||
1.62559</lang> |
1.62559</lang> |
||
=={{header|Java}}== |
=={{header|Java}}== |
||
Line 1,146: | Line 1,145: | ||
<pre> |
<pre> |
||
difference = 1.625593% |
difference = 1.625593% |
||
</pre> |
|||
=={{header|Perl 6}}== |
|||
<lang perl6>#!/usr/bin/env perl6 |
|||
use v6; |
|||
use GD::Raw; |
|||
# Reference: |
|||
# https://github.com/dagurval/perl6-gd-raw |
|||
my $fh1 = fopen('./Lenna50.jpg', "rb") or die; |
|||
my $img1 = gdImageCreateFromJpeg($fh1); |
|||
my $fh2 = fopen('./Lenna100.jpg', "rb") or die; |
|||
my $img2 = gdImageCreateFromJpeg($fh2); |
|||
my $img1X = gdImageSX($img1); |
|||
my $img1Y = gdImageSY($img1); |
|||
my $img2X = gdImageSX($img2); |
|||
my $img2Y = gdImageSY($img2); |
|||
($img1X == $img2X and $img1Y == $img2Y) or die "Image dimensions must match."; |
|||
my $diff = 0; |
|||
my ($px1, $px2); |
|||
loop (my $i = 0; $i < $img1X; $i++) { |
|||
loop (my $j = 0; $j < $img1Y; $j++) { |
|||
$px1 = gdImageGetPixel($img1, $i, $j); |
|||
$px2 = gdImageGetPixel($img2, $i, $j); |
|||
$diff += abs(gdImageRed($img1, $px1) - gdImageRed($img2, $px2)); |
|||
$diff += abs(gdImageGreen($img1, $px1) - gdImageGreen($img2, $px2)); |
|||
$diff += abs(gdImageBlue($img1, $px1) - gdImageBlue($img2, $px2)); |
|||
} |
|||
} |
|||
say "%difference = ", $diff/($img1X*$img1Y*3*255)*100; |
|||
gdImageDestroy($img1); |
|||
gdImageDestroy($img2); |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
%difference = 1.625593098 |
|||
</pre> |
</pre> |
||
Line 1,365: | Line 1,319: | ||
(percentage-difference lenna50 lenna100) ;-> 1.7749329408009846</lang> |
(percentage-difference lenna50 lenna100) ;-> 1.7749329408009846</lang> |
||
=={{header|Raku}}== |
|||
(formerly Perl 6) |
|||
<lang perl6>#!/usr/bin/env perl6 |
|||
use v6; |
|||
use GD::Raw; |
|||
# Reference: |
|||
# https://github.com/dagurval/perl6-gd-raw |
|||
my $fh1 = fopen('./Lenna50.jpg', "rb") or die; |
|||
my $img1 = gdImageCreateFromJpeg($fh1); |
|||
my $fh2 = fopen('./Lenna100.jpg', "rb") or die; |
|||
my $img2 = gdImageCreateFromJpeg($fh2); |
|||
my $img1X = gdImageSX($img1); |
|||
my $img1Y = gdImageSY($img1); |
|||
my $img2X = gdImageSX($img2); |
|||
my $img2Y = gdImageSY($img2); |
|||
($img1X == $img2X and $img1Y == $img2Y) or die "Image dimensions must match."; |
|||
my $diff = 0; |
|||
my ($px1, $px2); |
|||
loop (my $i = 0; $i < $img1X; $i++) { |
|||
loop (my $j = 0; $j < $img1Y; $j++) { |
|||
$px1 = gdImageGetPixel($img1, $i, $j); |
|||
$px2 = gdImageGetPixel($img2, $i, $j); |
|||
$diff += abs(gdImageRed($img1, $px1) - gdImageRed($img2, $px2)); |
|||
$diff += abs(gdImageGreen($img1, $px1) - gdImageGreen($img2, $px2)); |
|||
$diff += abs(gdImageBlue($img1, $px1) - gdImageBlue($img2, $px2)); |
|||
} |
|||
} |
|||
say "%difference = ", $diff/($img1X*$img1Y*3*255)*100; |
|||
gdImageDestroy($img1); |
|||
gdImageDestroy($img2); |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
%difference = 1.625593098 |
|||
</pre> |
|||
=={{header|REBOL}}== |
=={{header|REBOL}}== |