Сравните изображения в SQL - PullRequest
3 голосов
/ 15 апреля 2009

Каков наилучший способ сравнения изображений в базе данных? Я попытался сравнить их (@Image это изображение типа):

Select * from Photos 
where [Photo] = @Image

Но получает ошибку «Типы данных image и image несовместимы в операторе равенства»

Ответы [ 5 ]

9 голосов
/ 15 апреля 2009

Поскольку тип данных Image представляет собой двоичный и огромный объем для хранения данных, IMO, самый простой способ сравнения полей изображения - сравнение хешей. Таким образом, вам нужно хранить хеш столбца Фото на вашем столе.

1 голос
/ 24 января 2010

Обычно, как уже упоминалось, вам нужно использовать специальные алгоритмы с полки обработки изображений.

Кроме того, трудно дать точный ответ, потому что вопрос слишком общий. Два изображения могут рассматриваться как разные или не основанные на количестве свойств.

Например, у вас может быть одно изображение цветка 100x100 пикселей и изображение того же цветка, но с размером 50x50 пикселей. Для некоторых целей и применений эти два будут считаться одинаковыми (независимо от разных размеров), но будут другими изображениями для других целей.

Возможно, вы захотите проверить, как сравнение изображений осуществляется некоторыми инструментами, и узнать, как это работает:

Если вы не хотите сравнивать содержимое изображения, а просто проверить, эквивалентны ли два двоичных потока (файлы изображений, другие двоичные файлы, двоичный объект с содержимым изображения), тогда вы можете сравнить MD5 контрольные суммы изображения.

1 голос
/ 15 апреля 2009

Если вам нужно сравнить изображение, вы должны извлечь все изображения из базы данных и сделать это на языке, который вы используете для доступа к базе данных. Это одна из причин, почему не рекомендуется хранить изображения или другие двоичные файлы в реляционной базе данных. Вы должны создавать уникальное имя файла каждый раз, когда вы хотите сохранить изображение в базе данных. Переименуйте файл с этим уникальным именем файла, сохраните изображение на диске и вставьте в свою базу данных его имя на диске и, в конечном итоге, оригинальное имя файла или имя, предоставленное пользователем вашего приложения.

0 голосов
/ 15 апреля 2009

Сравнение изображений подпадает под определенную категорию информатики, которая называется обработка изображений. Вам следует поискать некоторые библиотеки, которые предоставляют возможности обработки изображений. Используя это, вы можете сравнить, в каком соотношении два изображения одинаковы или идентичны. Вы можете иметь 2 изображения, соответствующие друг другу до 50% или более или менее. Существуют математические алгоритмы, определяющие формулы сравнения, которые возвращают соотношение.

Надеюсь, это даст вам направление для дальнейшей работы над вашей проблемой.

0 голосов
/ 15 апреля 2009

Это зависит от того, насколько точным вы хотите быть и сколько изображений вам нужно сравнить. Вы можете использовать различные функции, такие как DATALENGTH и SUBSTRING или READTEXT, чтобы сделать некоторые сравнения. В качестве альтернативы вы можете написать код в CLR и реализовать его с помощью хранимой процедуры для сравнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...