Bonjour à tous et à toutes,
N'étant pas habitué aux forums, je vous prie de m'excuser par avance pour les imprécisions que je peux commettre ou pour les fautes d'orthographe.
Je vous explique ma situation:
Je m'appelle Thomas je suis étudiant en Ingénierie informatique spécialisation dévellopement de logiciel et je suis actuellement en stage. Dans le cadre de celui-ci, j'utilise la librairie JavaCV, qui implémente les méthodes natives de OpenCV 2.3.1 en Java.
J'ai pu constater ce que je pense être une incohérence dans le code natif de OpenCV, et j'aimerais votre avis sur la question ou une explication:
Méthode cvCreateMatHeader:
cvCreateMatHeader( int rows, int cols, int type )
{
[...]
type = CV_MAT_TYPE(type);
[...]
}
Méthode cvDeterminant:
double cv::determinant( InputArray _mat )
{
Mat mat = _mat.getMat();
double result = 0;
int type = mat.type(), rows = mat.rows;
size_t step = mat.step;
const uchar* m = mat.data;
CV_Assert( mat.rows == mat.cols && (type == CV_32F || type == CV_64F));
#define Mf(y, x) ((float*)(m + y*step))[x]
#define Md(y, x) ((double*)(m + y*step))[x]
if( type == CV_32F )
{
[...]
par ailleurs on à:
def CV_MAT_TYPE(flags):
((flags) & CV_MAT_TYPE_MASK)
CV_MAT_TYPE_MASK = (CV_DEPTH_MAX*CV_CN_MAX - 1) // 8*4 - 1 =31
CV_DEPTH_MAX = (1 << CV_CN_SHIFT) //(décalage binaire de 3 -> CV_DEPTH_MAX = 8)
CV_CN_SHIFT = 3
CV_CN_MAX = 4
voila, je ne vois pas comment type peut valoir 5...
Dans mon code, je prend une IplImage de format IPL_DEPTH_8U, je la resize pour avoir une image carré, je la convertit avec un CvConvertScale en IPL_DEPTH_32F et je fait un cvGetMat pour récuperer une matrice a partir de cette image.
tout cela marche puisque je l'utilise avec d'autres méthodes ayant les mêmes prérequis que cvDet.
voici le morceau de code ou je me suis rendu compte de ce problème, les conditions du if sont vraies:
if (inputMatrix.depth() == CV_32F && inputMatrix.rows() == inputMatrix.cols())
{
inputMatrix.type(); // int = 1111638037
Double outputResult = cvDet(inputMatrix);
}
Si vous avez besoin de plus amples informations pour m'aider, n'hésitez pas à me les demander.
Je vous remercie par avance pour les réponses que vous pourrez m'apporter.
je vous met les liens d'ou j'ai extrait ces informations:
-méthode cvDet: https://code.ros.org/trac/opencv/bro...src/lapack.cpp
-méthode cvCreateMatHeader: https://code.ros.org/trac/opencv/bro.../src/array.cpp
-CV_MAT_TYPE: http://michaotto.gmxhome.de/cvtypes.py.txt
Partager