2009-04-15 105 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圖像的校驗和。