Im, использующий OpenCV в java, развивающийся с помощью eclipse, и изображения читаются таким образом для сопоставления шаблонов.OpenCV Чтение изображения для соответствия шаблону
String inFile = "C:/image.png";
Mat img = Highgui.imread(inFile);
Это хорошо, но мои изображения не находятся на моем локальном компьютере. Я должен сравнить 2000 изображений на сервере в базе данных mysql. Сохранение 2000 изображений на мой компьютер, а затем их чтение не имеет смысла.
Так что мне нужно, чтобы Highgui.imread (inFile) читал изображение: Highgui.imread (Image inImage) или, может быть, Highgui.imread (File inFile), я не смог найти источник java для редактирования/изменения. Мне нужно каким-то образом конвертировать мои изображения, которые будут поступать из базы данных mysql в Mat, для сравнения (сопоставление шаблонов) ...
Дополнительная информация: У меня есть таблица mysql со столбцами: ID, Name, Description, Image1, Image2. Тип столбцов Image1 и 2 - «mediumblob», и когда вы щелкаете правой кнопкой мыши по столбцу Image1 или Image2 в «Workbench MySQL», я выбираю «Open Value in Editor», тогда есть 3 вкладки; Binary, Text, Image, at Image мое изображение отображается отлично. Тип изображений - png. В конце я хочу сравнить Image1 с Image2. Image2 - inFile, а Image1 - templateFile.
Извините, я думал, что мой вопрос был ясен. Я постараюсь перефразировать его. У меня есть локальный компьютер и сервер. Изображения сохраняются в базе данных mysql на сервере. Я хочу запустить приложение с моего локального компьютера, который получает/обращается к 2 изображениям на сервере, а затем сравнивает их с помощью соответствия шаблону OpenCV. Afaik вы не можете получить доступ к столбцу mysql с /server/home/user/mysql/image_table/mypicture.png, я пишу это из-за предложения «guneykayim». Так как Im планирование для получения изображений, нету пробовал еще, но план:
Blob imageBlob = resultSet.getBlob(yourBlobColumnIndex);
InputStream binaryStream = imageBlob.getBinaryStream(0, imageBlob.length());
Или
InputStream binaryStream = resultSet.getBinaryStream(yourBlobColumnIndex);
Или
try{
Class.forName(driverName);
con = DriverManager.getConnection(url+dbName,userName,password);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select image from image");
int i = 0;
while (rs.next()) {
InputStream in = rs.getBinaryStream(1);
OutputStream f = new FileOutputStream(new File("test"+i+".jpg"));
i++;
int c = 0;
while ((c = in.read()) > -1) {
f.write(c);
}
f.close();
in.close();
}
}catch(Exception ex){
System.out.println(ex.getMessage());
}
Мой вопрос: Я хочу, чтобы сравнить 2 изображения , Я получил из базы данных mysql.
Highgui.imread();
Этот метод ожидает строки, но я хочу, чтобы дать InputStream или файл OutputStream ... Как я уже сказал, я не хочу, чтобы сохранить 2000 изображений на локальном компьютере. Я открыт для альтернативных способов.
Final Simplest Rephrasing: Как использовать сопоставление шаблонов java OpenCV на 2 изображениях, хранящихся в базе данных mysql.
Другими словами, как я могу преобразовать объект InputStream в объект Mat?
Спасибо за чтение.
Вопрос не ясен. Или, может быть, это должны быть два отдельных вопроса. Почему вы задали вопрос OpenCV с вопросом mysql? – guneykayim
В любом случае ...Пробовали ли вы писать сетевой путь к файлу изображения в 'inFile'? Например, 'inFile =" networkpath/image.png ". AFAIK вы можете прочитать это изображение. – guneykayim
Я не могу читать сетевые патчи с помощью 'imshow', вы все равно можете прочитать его с помощью« VideoCapture ». Проверьте docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture Videocapture может открывать «источники» из IP, включая камеры, видео и изображения FILES! Если ваш сервер не предоставляет файлы, а данные двоичного изображения напрямую, вы можете использовать его напрямую (но вам нужно знать формат! Например, RGB24). Трудно сказать, что делать, если вы не предоставляете информацию о том, какие данные вы получаете с вашего сервера ... – Micka