wie können wir Messen die Entfernung zwischen Objekt und android-Handy-Kamera
Möchte ich berechnen Sie die Entfernung zwischen der Kamera und dem erkannten Objekt.Für diese habe ich versucht, eine Menge von Methoden, die ich versuchte zu finden, der Winkel zwischen dem Objekt und der Kamera mit Beschleunigungssensor und verwenden Sie dann
d = h * tan a
h ist die Höhe von der Basis in der Regel die 1.4
und ich habe versucht, zu berechnen und den Winkel, der durch die Verwendung von get-Orientierung-Methode. Bitte lassen Sie mich wissen, wo ich falsch mache. Seine seit mehr als 2 Tagen habe ich Schwierigkeiten mit dieser Anforderung. Wir haben verschiedene Kamera-Anwendungen, die auf Android-Store und habe versucht zu verstehen, die die gleiche Funktionalität, aber es wurde nichts fruchtbar.
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
accSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
magnetSensor = mSensorManager
.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
//TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
//TODO Auto-generated method stub
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
gravity = event.values;
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
geoMagnetic = event.values;
if (gravity != null && geoMagnetic != null) {
float R[] = new float[9];
float I[] = new float[9];
boolean success = SensorManager.getRotationMatrix(R, I, gravity,
geoMagnetic);
if (success) {
/* Orientation has azimuth, pitch and roll */
float orientation[] = new float[3];
//SensorManager.remapCoordinateSystem(R, 1, 3, orientation);
SensorManager.getOrientation(R, orientation);
azimut = 57.29578F * orientation[0];
pitch = 57.29578F * orientation[1];
roll = 57.29578F * orientation[2];
}
}
}
captureButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//get an image from the camera
double d = (Math.tan(Math.toRadians(Math.abs(pitch))) * sensorHeight);
Toast.makeText(
getApplicationContext(),
"Distance = "
+ String.valueOf(d)
+ "m Angle = "
+ String.valueOf(Math.toRadians(Math.abs(pitch))),
Toast.LENGTH_LONG).show();
}
});
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this, accSensor,
SensorManager.SENSOR_DELAY_NORMAL);
mSensorManager.registerListener(this, magnetSensor,
SensorManager.SENSOR_DELAY_NORMAL);
}
- Wie würden die Winkel beziehen sich auf die Entfernung? Was ist, wenn ich stehe auf einem Balkon? Auch, wie kann man überhaupt Messen Sie den Abstand, wenn Sie nicht wissen, die Abmessungen des aufgenommenen Objekts? Plus, wie viel Objektiv und optischer sensor die Dichte der Informationen, die Sie benutzen?
- Der Zweck der app ist der Abstand zwischen einem Objekt und der Kamera. Vorausgesetzt, beide stehen auf dem gleichen Boden. Wir werden nicht versuchen, Messen Sie die Größe des Objekts.
- Auch, Sie wollen schauen, stackoverflow.com/q/4588485
- Es ist nicht möglich, mit nur einer Kamera. Sie haben, um zu wissen, weitere Informationen zum positionieren des Objekts relativ zu Ihrem Gerät. Es ist nicht für nichts, dass der Kinect ist ein IR-beamer + IR-Kamera neben der normalen Kamera. Die Ausrichtung Ihres Gerätes werden Ihnen keine Ahnung auf die Entfernung des Objekts vor der Kamera.
- Ich habe schon geschaut in der es aber nicht in der Lage gewesen, um die Winkel richtig als Ergebnis von denen nicht in der Lage zu verwenden, Tan, um die Distanz.Der Zweck ist, nur um appoximate Entfernung.
- Könnten Sie mir sagen, was ist das 57.29578 F?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre getRotationMatrix ist wahrscheinlich false zurückgeben! Sie sollten kopieren Sie die Werte in Ihre eigenen Vektoren, so bekommen Sie nicht gemischter up! Verwenden Sie die clone () - Methode, so zu tun!
Ihren code verwenden und dies zu ändern ich war in der Lage, um die Azimut - /pitch/roll-Werte, ohne diese änderung den Erfolg flag false zurückgegeben:
Sollten Sie den PITCH-Wert, wenn Sie halten Sie das Telefon im portrait-Modus, wenn Sie halten Sie das Telefon im Querformat-Modus verwenden Sie den ROLL-Wert.
Wenn Sie halten Sie das Telefon an einen 1.4 Höhe dann haben Sie:
Bitte beachten Sie, dass Sie verwenden sollten, BOGENMAß und nicht GRAD auf die Mathematik.tan-Funktion.
Ich hier getestet und die Werte scheinen gültig zu sein!
Der endgültige code ist