Depende de lo que trates de hacer.
Mencione que desea medir la altura de las estanterías. Si está de acuerdo en que considere el área cercana de la estantería "más corta" que la altura del extremo de la estantería al final de la fila, todo lo que está buscando es medir la distancia. Elija una unidad de "píxeles" y luego mida la distancia usando el teorema de Pitágoras. (x^2 + y^2 = z^2)
Lo que probablemente está buscando es que la altura de la estantería sea la misma que la altura de la estantería más alejada. En ese caso, debe tener más información. Tienes que hacer una transformación 2D -> 3D: tienes una imagen 2D y necesitas reconstruir una imagen 3D de esa imagen. En ese punto, necesita una tercera información, ya que desea 3 variables (X, y, z) a partir de 2 variables.
Definitivamente puede hacer esto con OpenCV si calibra correctamente el sistema y tiene un segundo punto de referencia (por ejemplo, una línea de láser). Esto se conoce como un enfoque de luz estructurada: consulte this link para obtener más información o google "luz estructurada de visión artificial"
necesitan interminables un conjunto de visión artificial tal como NI VISION DE LA MÁQUINA ... por cierto ¿qué estás usando C#, VB, LabVIEW? – Luiscencio