#java #opencv
#java #opencv
Вопрос:
У меня возникла эта проблема с головной болью, и, похоже, я не могу решить проблему. Что я делаю, у меня есть машина, к которой тоже подключен компьютер, и когда когда-либо условие будет выполнено, оно сделает снимок. Но проблема в том, что когда он делает снимок, это иногда странно, смотрите ниже. Я пытался перевернуть изображение, но не все получается наоборот. Я искал везде … мне ничего не помогло. Я перепробовал много разных примеров кодов, они либо не работают, либо все еще имеют эту проблему.
Обычная картинка:http://imgur.com/ve4bp9M
Странная картинка:http://imgur.com/5Z46oPz
public Mat getCapture(){
if(camera==null || !camera.isOpened()){
camera = new VideoCapture(0);
setCameraValues();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Mat m = null;
if(!camera.isOpened()){
System.out.println("Error");
}
else {
m = new Mat();
while(true){
camera.read(m);
if (!m.empty()){
//Mat file is not empty
break;
}
}
}
camera.release();
return m;
}
Ниже приведены настройки камеры: фокус, масштабирование, яркость и т.д.
public void setCameraValues()
{
this.camera.set(28, ((Integer)this.values.get(0)).intValue());
this.camera.set(27, ((Integer)this.values.get(1)).intValue());
this.camera.set(10, ((Integer)this.values.get(2)).intValue());
this.camera.set(11, ((Integer)this.values.get(3)).intValue());
this.camera.set(12, ((Integer)this.values.get(4)).intValue());
this.camera.set(15, ((Integer)this.values.get(5)).intValue());
this.camera.set(20, ((Integer)this.values.get(6)).intValue());
this.camera.set(33, ((Integer)this.values.get(7)).intValue());
this.camera.set(34, ((Integer)this.values.get(8)).intValue());
this.camera.set(3, ((Integer)this.values.get(9)).intValue());
this.camera.set(4, ((Integer)this.values.get(10)).intValue());
}
Редактировать:
Веб-камера, которую я использую, — Microsoft LifeCam HD
Комментарии:
1. похоже, что цвета инвертированы?
2. Я попытался инвертировать странную картинку, она и близко не подходит к обычной картинке.
3. Вы играли с цветовым пространством? Например. cv::cvtcolor из HSV в BGR.
4. так ты говоришь, что это только иногда странно? может быть, это скорее аппаратная проблема вашей камеры? возможно, вашей камере требуется некоторое время после активации, пока не будут измерены правильные изображения? Я видел это на разных камерах. Возможно, попробуйте не выпускать камеру после каждого захвата. Если это решит проблему, возможно, вы сможете обойти проблему.
5. У меня есть еще одна идея: может ли случиться так, что два потока выполняются «одновременно»? Может быть, проблема возникает, когда два потока одновременно считывают изображения, или, может быть (что еще более вероятно), если один устанавливает его параметры, в то время как другой поток считывает изображение?? Пожалуйста, попробуйте добавить блокировку мьютекса в начале и разблокировку в конце функции!!!