Я нахожусь в ситуации, когда мне нужно идентифицировать различные виды ввода, включая файлы, папки, изображения и т. Д. c. В случае изображений мне нужно конкретно знать, создано ли изображение с использованием OpenCV (для факта, что это может быть BGR), или любых других типов изображений.
Я заметил, что изображения, созданные с использованием skimage.io.imread
, matplotlib.pyplot.imread
и opencvs cv2.imread()
, все numpy.ndarray
, и я никак не могу различить guish между ними.
Я пытался использовать opencv cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
на входном изображении, надеясь, что изображения не-opencv вызовут исключение, и, таким образом, я могу определить, является ли изображение opencvs или нет.
К сожалению, только PIL
, изображения терпят неудачу в этом, и оба matplotlib
s и skimage
s работают нормально (они изменяются с RGB
на BGR
, так что это тоже не хорошо).
Я пытался найти базовый dtype, но они все одинаковые (uint8). Я попытался найти атрибут, определяющий c для opencv, чтобы другие не могли его получить, поэтому, запросив этот атрибут, я смогу узнать, бесполезно ли это изображение opencv!
Я получаю только объект со входа, и в случае изображений невозможно заранее узнать, каков был источник отправленного изображения (было ли оно прочитано с использованием opencv? Следует ли использовать преобразование в RGB
, или иначе, вы получаете идею и по конвейеру, каждый вход имеет свой собственный набор операций для выполнения.
Обновление:
Использование type()
, Я могу различить guish между всеми изображениями, кроме matplotlib
с и opencv
с. Кажется, я не могу найти способ разнести guish между этими двумя!