【问题标题】:Compare Images in SQL在 SQL 中比较图像
【发布时间】:2009-04-15 10:20:41
【问题描述】:

与数据库中的图像进行比较的最佳方法是什么? 我试图比较它们(@Image 是 Image 类型):

Select * from Photos 
where [Photo] = @Image

但收到错误“数据类型图像和图像在等于运算符中不兼容”。

【问题讨论】:

    标签: sql stored-procedures


    【解决方案1】:

    由于 Image 数据类型是二进制且用于存储数据的巨大空间,IMO,比较 Image 字段的最简单方法是哈希比较。 所以你需要在你的表上存储 Photo 列的哈希值。

    【讨论】:

      【解决方案2】:

      如果您需要比较图像,您应该从数据库中检索所有图像,并使用您用于访问数据库的语言进行比较。这就是为什么在关系数据库中存储图像或其他二进制文件不是最佳实践的原因之一。每次要将图像存储在数据库中时,都应该创建唯一的文件名。用这个唯一的文件名重命名文件,将图像存储在磁盘上,然后将它在磁盘上的名称插入到数据库中,并最终插入文件的原始名称或应用用户提供的名称。

      【讨论】:

      • 将它们存储在磁盘上如何帮助您比较它们?你仍然需要编写一个工具来做到这一点。
      • 哎呀,我忘了在保存文件之前,您可以生成它的校验和并将其保存在数据库中。此数据可用于比较文件。任何其他方法都会太慢
      【解决方案3】:

      通常,正如已经提到的,您需要使用图像处理搁置中的专用算法。

      此外,由于问题过于笼统,因此很难给出准确的答案。根据属性的数量,两张图片可能会被视为不同或不同。

      例如,您可以拥有一张 100x100 像素的花朵图像和同一朵花的图像,但将其调整为 50x50 像素。对于某些用途和应用,这两个将被认为是相似的(不管不同的尺寸),但对于其他用途将是不同的图像。

      您可能想检查一些工具如何实现图像比较并了解其工作原理:

      如果您不想比较图像内容而只是检查两个二进制流(图像文件、其他二进制文件、带有图像内容的二进制对象)是否相等,那么您可以比较图像的MD5 校验和。

      【讨论】:

        【解决方案4】:

        这取决于您希望达到的准确度以及需要比较的图像数量。您可以使用各种函数,如 DATALENGTH 和 SUBSTRING 或 READTEXT 进行一些比较。或者,您可以在 CLR 中编写代码并通过存储过程实现它以进行比较。

        【讨论】:

        • 图像无法以这种方式进行比较。它不仅仅是关于二进制数据,它还不止于此.. 图像处理
        • 你有没有试过这样做?您甚至阅读了我的全部答案吗?
        【解决方案5】:

        比较图像属于计算机科学的一个特定类别,即图像处理。您应该搜索一些提供图像处理功能的库。使用它,您可以比较给定两个图像相同或相同的比例。您最多可以有 2 张相互匹配的图像,最高可达 50% 或更多或更少。有定义返回比率的比较公式的数学算法。

        希望这能为您提供进一步解决问题的方向..

        【讨论】:

          猜你喜欢
          • 2021-12-07
          • 1970-01-01
          • 2012-08-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多