我需要檢查具有恆定大小(512x512像素)的PNG圖像是否只有白色像素而沒有其他東西。檢查圖像是純白色的嗎?
有沒有一種簡單的方法來做到這一點,最好不手動檢查每個像素?也許使用ImageMagick?
我需要檢查具有恆定大小(512x512像素)的PNG圖像是否只有白色像素而沒有其他東西。檢查圖像是純白色的嗎?
有沒有一種簡單的方法來做到這一點,最好不手動檢查每個像素?也許使用ImageMagick?
我不認爲有一種神奇的方式來確定圖像是否是白色的。
你可能只需要檢查所有像素,但你可以有你的圖像的快速訪問,如果你將其轉換爲位圖和,而不是使用GetPixel()
,您使用LockBits()
方法鎖定位圖在內存中。然後,您可以使用BitmapData
類型並編寫自己的快速GetPixel()
,如此處所述:Working with BitmapData。
編輯:
其實,我雖然的另一種方法:你可以創建一個同樣大小的純白色圖像,然後通過計算和比較它們的哈希值的圖像進行比較,以那一個。看看這個:Comparing two images。
您可以使用Eutherpy答案中所述的方法。如果您想要執行更多圖像操作並且需要高級圖像庫,則可能需要使用我創建的名爲Magick.NET的ImageMagick C#包裝器。
下面是如何,你可以在該庫檢查一個小樣本:
private static bool IsWhite(MagickImage image)
{
var white = MagickColors.White;
using (var pixels = image.GetPixels())
{
foreach (var pixel in pixels)
{
var color = pixel.ToColor();
if (color != white)
return false;
}
}
return true;
}
static void Main(string[] args)
{
using (var image = new MagickImage(@"c:\folder\yourimage.png"))
{
if (IsWhite(image))
Console.WriteLine("The image is all white");
}
}
從命令行,您可以運行
identify -verbose image
,尋找
Channel statistics:
Pixels: 10
Gray:
min: 65535 (1)
max: 65535 (1)
mean: 65535 (1)
如果圖像的「min」不是65535,那麼它不是一個完全白色的圖像。
通過讓Imagemagick告訴你答案,你可以避免解析,循環和兩步測試。
如果像素的平均爲1.0(它必須是如果所有像素是白色的),並且還寬度爲512,高度爲512,下面將輸出1的測試,否則爲0。
# Test a white 512x512 image => Result: 1
identify -format "%[fx:(mean==1)&&(w==512)&&(h==512)?1:0]" white.png
1
# Test a white 600x512 image => Result: 0
identify -format "%[fx:(mean==1)&&(w==512)&&(h==512)?1:0]" white600x512.png
0
# Test a gray image => Result: 0
identify -format "%[fx:(mean==1)&&(w==512)&&(h==512)?1:0]" gray90.png
0
關於比較散列的好主意!有用!謝謝 –
@OlegFilimonov真棒,我很高興! :) – Eutherpy