web-dev-qa-db-fra.com

OpenGL vs OpenCV pour débutant

Je suis un étudiant étudiant de première année apprenant actuellement la programmation C++. Je suis bon en mathématiques et en physique, alors je cherche à me spécialiser dans les graphiques 2D/3D avec OpenGL. Ma question concerne les différences entre OpenGL et OpenCV et la quantité de chevauchement de ces zones. D'après ce que j'ai lu, on crée des graphiques pendant que l'autre les traite. J'ai de nombreux livres sur les graphismes 3D et les mathématiques associées à elle. Ce que je me demande, c'est si les mêmes concepts que j'apprends à OpenGL puissent être appliqués à OpenCV. Est-il possible de devenir un ingénieur logiciel C++ pouvant être spécialisé dans OpenGL et OpenCV, ou est-ce un objectif irréaliste?

Je pose ces questions parce que je comprends que la programmation graphique 2D/3D nécessite une énorme quantité de connaissances en mathématiques et en physique, mais je ne sais pas trop sur OpenCV et les compétences préalables nécessaires pour "obtenir mon pied à la porte".

3
Jacob Perkins

OpenGL est une API graphique 3D. Il fournit des API décrivent une scène 3D et la rendu à une tramebuffer et l'affiche finalement sur un écran. Les primitives qu'il contient des listes de sommets, des listes de triangle, des listes de vitesses normales, etc. N.B. 2D est un cas particulier de 3D; IIRC OpenGL n'a pas de support 2D explicite (I.e. Sprites et Bit Blit)

OpenCV est une API de vision informatique (CV) et a des implémentations de divers algorithmes de CV, de détection BLOB, de correspondance de gabarit, etc.

OpenCV fonctionne généralement sur des données d'image réelles et ne fonctionnerait pas sur des graphiques générés par OpenGL. (Sauf si on essayait de faire un bot d'AI qui ne voit que la sortie de la tramebuffer d'un jeu, mais que dans une autre tangente complètement.)

"Est-il possible de devenir un ingénieur de logiciel C++ pouvant être spécialisé dans OpenGL et OpenCV, ou est-ce un objectif irréaliste?"

Bien sûr, ce sont des différents types de systèmes et vous pouvez vous spécialiser dans plus d'une chose. Quant aux graphiques OpenGL et 3D, si vous en apprenez, vous pouvez probablement utiliser l'un d'entre eux.

Pour l'apprentissage de la vision informatique, un système vous aidera certes avec un autre, mais probablement pas dans la même mesure que les graphiques informatiques.

n.B Cette question appartient probablement à un autre conseil.

5
esoterik

Je n'ai jamais utilisé Opencv, mais Afaik, il est très différent de OpenGL. OpenGL est une API C construite autour de beaucoup d'état mondial (c'est pourquoi il est souvent appelé une machine à états), tandis que OpenCV expose une interface C++ plus orientée objet, avec une utilisation intensive de modèles.

OpenGL est destiné à être une mince couche d'abstraction du matériel graphique, il peut donc également être considéré comme un pilote de périphérique, dans un sens. L'objectif principal de cette API est le rendu en temps réel, pas l'informatique à usage général. Les outils fournis par OpenGL sont donc principalement concentrés sur les polygones de dessin à l'écran aussi rapidement et aussi efficacement que possible.

Je ne peux pas faire un bon parallèle entre OpenGL et OpenCV, mais ma compréhension est que CV est beaucoup plus concentré sur le traitement de l'image hors ligne, il s'agit donc d'un concept différent de celui-ci par rapport au GL. Je devinerais cependant que OpenGL est souvent utilisé conjointement avec OpenCV pour mettre en œuvre la visualisation du traitement de l'image effectué par CV, de sorte que si vous vous concentrez sur CV, vous pouvez bénéficier d'une API graphique comme GL. Si votre intérêt principal est dans des graphiques en temps réel, tels que les jeux et les films CG, alors OpenGL devrait suffire. Vous n'êtes pas très susceptible de connaître des outils de vision sur ordinateur dans ces zones.

Enfin, vous avez raison de dire que la programmation graphique 2D/3D nécessite une connaissance des mathématiques et de la physique. Si vous êtes à l'aise avec les mathématiques, la vie devient beaucoup plus facile. Si vous aimez ce champ, apprenez d'abord les mathématiques, puis apprenez une API graphique, telle que OpenGL, pour mettre en œuvre la théorie.

2
glampert