2009-04-15 108 views
3

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

Select * from Photos 
where [Photo] = @Image 

但是接收错误“数据类型的图像和图像都在等于操作员不相容”。

回答

9

由于Image数据类型是存储数据的二进制和巨大空间,IMO最简单的比较图像字段的方法是散列比较。 所以你需要在你的桌子上存储照片列的散列。

1

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

+0

将它们存储在磁盘上如何帮助您比较它们?你仍然需要编写一个工具来做到这一点。 – 2009-04-15 10:48:18

+0

哎呀,我忘了那个 保存文件之前,你可以生成它的校验和并将其保存在数据库。这些数据可用于比较文件。任何其他方法会太慢 – 2009-04-15 14:06:25

0

这取决于您想要的准确度以及您需要比较多少图片。您可以使用DATALENGTH和SUBSTRING或READTEXT等各种功能进行一些比较。或者,您可以在CLR中编写代码并通过存储过程实现它以进行比较。

0

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

希望这给你一个方向上的问题进一步工作..

1

一般来说,它已经已经提到的,你需要使用专门的算法从图像处理搁置。

此外,很难给出准确的答案,因为这个问题太笼统了。根据属性数量,两幅图像可能会被视为不同或不同。

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

您可能要检查如何图像比较是通过一些工具来实现,并了解它是如何工作:

如果你不想要比较形象内容,但只是检查两个二进制流(图像文件,其他二进制文件,图像内容的二进制对象)是否相等,则可以比较MD5图像的校验和。