Consultez la réponse à la question précédente général des réponses à votre question.
Plus précisément, afin d'aborder les deux exemples que vous citez, ici, c'est l'équivalent du code c++ à l'aide de vecteurs pour générer dynamiquement des tableaux que vous avez mentionné (ne l'ai pas testé):
preallocation remplit array avec n valeurs, puis push_back ajoute à propos de n valeurs à la fin, donc vous devez supprimer la preallocation Merci @YuppieNetworking. J'ai été source de confusion des langues, de la pensée, le constructeur alloués sans remplissage. J'ai enlevé le preallocation, puisque l'utilisation de push_back. vous pouvez utiliser reserve fonction pour être plus efficace.
OpenCV propose quelques fonctions qui sont similaires à Matlab, mais leur nombre est très limité.
Vous pouvez
cv::Mat a = cv::Mat::eye(5);
cv::Mat b = cv::Mat::zeros(5);
cv::Mat img = cv::imread("myGorgeousPic.jpg");
cv::imwrite(img,"aCopyOfMyGorgeousPic.jpg");
Il prend également en charge diag()
Mais pour la plupart de ce délicat Matlab fonctionnalités comme linspace ou magic ou que ce soit, il n'y a pas de correspondant dans OpenCV, principalement parce que OpenCV n'est pas un package mathématiques, mais une vision par ordinateur. Si vous avez besoin d'une fonction spécifique, vous pouvez le copier dans votre projet (aka écrire par vous-même)
Malheureusement, C++ n'a rien intégré dans celui-ci pour permettre à ce genre de matrice d'initialisation. Il prend en charge les tableaux multidimensionnels, mais vous devez initialiser chaque élément de vous-même. C++ est un langage de plus bas niveau que Matlab et il implique beaucoup plus de travail pour écrire les fonctionnalités pour créer et initialiser une matrice de type variable.
Avoir dit qu'il y a un certain nombre de bibliothèques disponibles pour une utilisation avec le C++ qui est de faire du calcul numérique plus facile que si vous essayez de l'écrire vous-même. Si vous avez besoin d'envisager d'utiliser des bibliothèques, ont un oeil à ce lien qui suggère un peu de celles qui conviennent https://scicomp.stackexchange.com/questions/351/recommendations-for-a-usable-fast-c-matrix-library
Je voudrais ajouter une légère modification au code proposé par mattgately. Je l'ai utilisé et il existe des cas où step n'est pas correctement calculés par la division de rapprochement
double step =(b-a)/(n-1);
J'ai juste ajouté un petit nombre à la while condition:
while(a <= b+0.00001)
Comme cela, il a travaillé avec moi et le bon nombre d'intervalles a été créé.
votre code ne gère pas le cas lorsque l'étape est -ve. b>a ou b<a) ce qui vous fait dire ça, avez-vous essayé le code ? step est de double type et peut être +ou -ve.
Consultez la réponse à la question précédente général des réponses à votre question.
Plus précisément, afin d'aborder les deux exemples que vous citez, ici, c'est l'équivalent du code c++ à l'aide de vecteurs pour générer dynamiquement des tableaux que vous avez mentionné (ne l'ai pas testé):
array
avecn
valeurs, puispush_back
ajoute à propos den
valeurs à la fin, donc vous devez supprimer la preallocationMerci @YuppieNetworking. J'ai été source de confusion des langues, de la pensée, le constructeur alloués sans remplissage. J'ai enlevé le preallocation, puisque l'utilisation de
push_back
.vous pouvez utiliser
reserve
fonction pour être plus efficace.OriginalL'auteur mattgately
OpenCV propose quelques fonctions qui sont similaires à Matlab, mais leur nombre est très limité.
Vous pouvez
Il prend également en charge
diag()
Mais pour la plupart de ce délicat Matlab fonctionnalités comme
linspace
oumagic
ou que ce soit, il n'y a pas de correspondant dans OpenCV, principalement parce que OpenCV n'est pas un package mathématiques, mais une vision par ordinateur. Si vous avez besoin d'une fonction spécifique, vous pouvez le copier dans votre projet (aka écrire par vous-même)OriginalL'auteur Sam
Malheureusement, C++ n'a rien intégré dans celui-ci pour permettre à ce genre de matrice d'initialisation. Il prend en charge les tableaux multidimensionnels, mais vous devez initialiser chaque élément de vous-même. C++ est un langage de plus bas niveau que Matlab et il implique beaucoup plus de travail pour écrire les fonctionnalités pour créer et initialiser une matrice de type variable.
Avoir dit qu'il y a un certain nombre de bibliothèques disponibles pour une utilisation avec le C++ qui est de faire du calcul numérique plus facile que si vous essayez de l'écrire vous-même. Si vous avez besoin d'envisager d'utiliser des bibliothèques, ont un oeil à ce lien qui suggère un peu de celles qui conviennent https://scicomp.stackexchange.com/questions/351/recommendations-for-a-usable-fast-c-matrix-library
OriginalL'auteur mathematician1975
C'est une mise en œuvre simple si vous utilisez openCV.
OriginalL'auteur Babak.sir
OriginalL'auteur Amauro Sand
voici mon testés linspace très semblable à tous les autres, mais s'occupe de tous les cas:
n=1
...j'ai posté quelques légères modifications (voir ci-dessous)OriginalL'auteur Gilad
Je voudrais ajouter une légère modification au code proposé par mattgately. Je l'ai utilisé et il existe des cas où
step
n'est pas correctement calculés par la division de rapprochementJ'ai juste ajouté un petit nombre à la
while
condition:Comme cela, il a travaillé avec moi et le bon nombre d'intervalles a été créé.
OriginalL'auteur Poiex
Extension de @Gilad la réponse ci-dessus pour les cas de
n=0
etn=1
parce que celle-ci donne lieu à une division par zéro.ce qui vous fait dire ça, avez-vous essayé le code ?
step
est dedouble
type et peut être +ou -ve.OriginalL'auteur champost