OpenCV d'Avoir des problèmes avec cv::RAPIDE
Je suis en train d'utiliser l'open CV RAPIDE algorithim afin de détecter les coins à partir d'un flux vidéo. L'appel de la méthode et de set-up semble assez simple pourtant, je suis en cours d'exécution dans un certain nombre de problèmes. Quand j'ai essayer d'utiliser ce code
while(run)
{
clock_t begin,end;
img = cvQueryFrame(capture);
key = cvWaitKey(10);
cvShowImage("stream",img);
//Cv::FAST variables
int threshold=9;
vector<KeyPoint> keypoints;
if(key=='a'){
//begin = clock();
Mat mat(tempImg);
FAST(mat,keypoints,threshold,true);
//end = clock();
//cout << "\n TIME FOR CALCULATION: " << double(diffClock(begin,end)) << "\n" ;
}
J'obtiens cette erreur:
OpenCV Erreur: échec de l'Assertion (de l'image.données && image.type() == CV_8U) in unknown
fonction, fichier de ........\ocv\opencv\src\cvaux\cvfast.cpp ligne 6039
Alors j'ai pensé que c'est un problème avec la profondeur de l'image, j'ai donc quand j'ai ajouter ceci:
IplImage* tempImg = cvCreateImage(Size(img->width,img->height),8,1);
cvCvtColor(img,tempImg,CV_8U);
J'obtiens:
OpenCV Erreur: Mauvais nombre de canaux (nombre Incorrect de canaux pour cette conv
ersion code) en fonction inconnue, fichier ........\ocv\opencv\src\cv\cvcolor.cpp
ligne 2238
J'ai essayé d'utiliser un Tapis au lieu d'un IplImage à capturer, mais j'obtiens le même genre d'erreurs.
Des suggestions ou de l'aide?
Merci à l'avance.
Le fichier en entier juste pour rendre les choses plus facile pour tout le monde:
#include "cv.h"
#include "cvaux.hpp"
#include "highgui.h"
#include <time.h>
#include <iostream>
double diffClock(clock_t begin, clock_t end);
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
//Create Mat img for camera capture
IplImage* img;
bool run = true;
CvCapture* capture= 0;
capture = cvCaptureFromCAM(-1);
int key =0;
cvNamedWindow("stream", 1);
while(run)
{
clock_t begin,end;
img = cvQueryFrame(capture);
key = cvWaitKey(10);
cvShowImage("stream",img);
//Cv::FAST variables
int threshold=9;
vector<KeyPoint> keypoints;
if(key=='a'){
//begin = clock();
IplImage* tempImg = cvCreateImage(Size(img->width,img->height),8,1);
cvCvtColor(img,tempImg,CV_8U);
Mat mat(img);
FAST(mat,keypoints,threshold,true);
//end = clock();
//cout << "\n TIME FOR CALCULATION: " << double(diffClock(begin,end)) << "\n" ;
}
else if(key=='x'){
run= false;
}
}
cvDestroyWindow( "stream" );
return 0;
}
Vous devez vous connecter pour publier un commentaire.
Chaque fois que vous avez un problème à l'aide de la OpenCV API aller vérifier les tests/exemples disponibles dans le code source: fast.cpp
Cette pratique est extrêmement utile et éducatif. Maintenant, si vous jetez un oeil à ce code, vous remarquerez que l'image est convertie en niveaux de gris avant d'appeler
cv::FAST()
sur elle:Semble assez simple, en effet.
Vous avez besoin de changer cette
À
Vous pouvez lire cette
Bonne Chance
J'ai commencé à avoir le même message avec le code qui avait travaillé auparavant, et j'étais certain que mon Tapis a été U8 en niveaux de gris. Il s'est avéré que l'une des images que j'essayais de processus n'était plus là. Donc, dans mon cas, c'était un mauvais message d'erreur.
Prendre un coup d'oeil à cet exemple de code. Le code que vous utilisez semble tout à fait obsolète opencv, dans cet exemple, vous trouverez la façon dont disposent les détecteurs doivent être utilisés maintenant.
L'échantillon est générique pour plusieurs disposent de détecteurs (y compris les RAPIDES), de sorte que c'est comme il semble un peu plus compliqué.
http://code.opencv.org/projects/opencv/repository/entry/branches/2.4/opencv/samples/cpp/matching_to_many_images.cpp
Vous trouverez également plus d'échantillons dans le répertoire parent.
Veuillez suivre le code suivant pour avoir votre résultat souhaité. Pour montrer un exemple, j'envisage une image, mais vous pouvez tout simplement utiliser la même idée pour les trames de vidéo