Я хотел бы создать программу, которая сравнивает два изображения. Он должен иметь две папки, каждая из которых заполнена изображениями, а каждое изображение в одной папке имеет пару в другой папке (с тем же именем) ex: folder1 имеет 3 изображения: [a.png, b.png, c.png] , а папка2 имеет 3 изображения: [a.png, b.png, c.png]. Я хотел бы взять folder1/a и сравнить его с folder2/a. Я не знаю, с чего начать.Сравнение файлов изображений
ответ
Вы упомянули images
вместо file
, так что я предполагаю, что вы не хотите, чтобы сравнить исходные данные, но пикселы изображения и вы может также иметь порог для разницы между изображениями
Простой способ сделать это - сравнить два изображения с помощью PIL. PIL имеет функцию histogram
, вы можете использовать ее для получения гистограммы для обоих изображений, а затем получения RMS (среднеквадратичного значения), например.
import ImageChops
import math, operator
def rmsdiff(im1, im2):
"Calculate the root-mean-square difference between two images"
h = ImageChops.difference(im1, im2).histogram()
# calculate rms
return math.sqrt(reduce(operator.add,
map(lambda h, i: h*(i**2), h, range(256))
)/(float(im1.size[0]) * im1.size[1]))
скопирована из http://effbot.org/zone/pil-comparing-images.htm
когда у вас есть функция, которая возвращает rmsdiff, вы можете использовать его в другой функции, которая перебирает через все файлы например
def diff_folder(folder1, folder2):
for path1 in glob.glob(folder1+"/*.png"):
filename = os.path.basename(path1)
path2 = os.path.join(folder2, filename)
if not os.path.exists(path2):
continue
im1 = Image.open(path1)
im2 = Image.open(path2)
diff = rmsdiff(im1, im2)
if diff > threshold:
print "different"
C#, Python или C? взглянуть на:
How to compare Image objects with C# .NET?
Compare two images the python/linux way
Успехов
Это C# решение, которое сравнивает файлы с использованием сопоставления двоичных файлов. Однако изображения могут содержать метаинформацию, которая отличается, даже если изображения выглядят одинаково. Поэтому было бы целесообразно сначала открыть изображение как изображение, а не просто как файл для сравнения.
public void CompareImages()
{
var dir1 = new DirectoryInfo(@"C:\path1");
FileInfo[] files1 = dir1.GetFiles("*.png");
var dir2 = new DirectoryInfo(@"C:\path2");
FileInfo[] files2 = dir2.GetFiles("*.png");
Dictionary<string, FileInfo> files2Dict = files2.ToDictionary(f => f.Name);
foreach (FileInfo f1 in files1) {
FileInfo f2;
bool equal = true;
if (files2Dict.TryGetValue(f1.Name, out f2) && f1.Length == f2.Length) {
byte[] image1 = GetFileBytes(f1);
byte[] image2 = GetFileBytes(f2);
for (int i = 0; i < image1.Length; i++) {
if (image1[i] != image2[i]) {
equal = false;
break;
}
}
} else {
equal = false;
}
Console.WriteLine(f1.Name + ": " + (equal ? "Images are equal" : "Images are NOT equal"));
}
}
private static byte[] GetFileBytes(FileInfo f)
{
using (FileStream stream = f.OpenRead()) {
byte[] buffer = new byte[f.Length];
stream.Read(buffer, 0, (int)f.Length);
return buffer;
}
}
Я не вижу ничего, кроме сравнения двоичных файлов –
- 1. Сравнение изображений
- 2. сравнение файлов
- 3. Сравнение изображений GIF пикселей
- 4. SIFT- сравнение изображений
- 5. сравнение двух векторных изображений
- 6. Сравнение изображений PHP
- 7. C# Сравнение изображений кнопок
- 8. Сравнение изображений с NSData
- 9. Сравнение изображений AForge
- 10. OSX: Сравнение двух изображений
- 11. Сравнение двух изображений
- 12. Сравнение изображений на Android.
- 13. Сравнение изображений логотипов
- 14. Java быстрое сравнение изображений
- 15. сравнение двух изображений
- 16. Android ImageButton сравнение изображений
- 17. Как сделать сравнение изображений?
- 18. Сравнение изображений для подобия
- 19. Сравнение изображений - быстрый алгоритм
- 20. сравнение изображений iOS
- 21. Сравнение изображений с Properties.Resources.image
- 22. Сравнение 2 разных изображений
- 23. C# - Сравнение изображений (быстрый)
- 24. IOS: сравнение двух изображений
- 25. Сравнение восприятия изображений
- 26. Unity3D сравнение изображений
- 27. Сравнение изображений на лицо
- 28. Сравнение и сопоставление изображений
- 29. Сравнение двух изображений визуально
- 30. сравнение изображений в matlab
Вы хотите сравнить имена файлов или содержимое изображения? –
, если вы хотите найти одинаковые изображения, вы можете сравнить CRC32 файла. Если вам нужен полноценный сопоставитель изображений, я думаю, вам понадобится нечто большее (декодирование изображения на необработанные пиксели и сравнение пикселя по пикселям) – BigMike
Сравнить файлы или изображения? –