我是新手,我的反对意见是建立一些Web应用程序来实现用户将数据存储在数据库中作为存储,而我想要的只是存储一对或一些图像时减少两次或更多次。
所以,我需要的是如何找到已存储在数据库中的重复或类似图像,或者当用户尝试在第一步中导入它时更好,并且如果他们的图像与已经存在的图像类似存储在数据库中的系统可以发出警告,不要存储该图像。
我只想开发如何在数据库的特定目录中找到一些类似或重复的图像。你能否从第一部分给我一些关于如何构建它的解释,我应该从基本步骤学到什么,比如教程或其他什么。如果可能的话,我想学到很多东西。
先谢谢,我真的需要这个帮助,谢谢。
答案 0 :(得分:1)
寻找类似图像的解决方案要复杂得多,所以我会先找到重复的图像。最简单的方法是采用图像位的SHA1哈希值。下面是C#中的一些代码来实现这一点(见下文)。至于将哈希存储在数据库中,我建议您使用binary(20)
数据类型来存储哈希的结果。这使得SQL服务器能够比将此哈希存储为字符串或其他格式更快地进行索引和查询。
private static byte[] GetHashCodeForFile(string file)
{
int maxNumberOfBytesToUse = 3840000;
using (Stream sr = File.OpenRead(file))
{
byte[] buffer = (sr.Length > maxNumberOfBytesToUse) ? new byte[maxNumberOfBytesToUse]: new byte[sr.Length];
int bytesToReadIn = (sr.Length < maxNumberOfBytesToUse) ? (int)sr.Length : maxNumberOfBytesToUse;
sr.Read(buffer, 0, bytesToReadIn);
System.Security.Cryptography.HashAlgorithm hasher = System.Security.Cryptography.SHA1.Create();
byte[] hashCode = hasher.ComputeHash(buffer);
return hashCode;
}
}
搜索类似图像是目前正在进行大量研究的难题。这有点取决于你如何定义相似的。寻找类似图像的一些突出方法是: