Je suis un peu nouveau pour OpenCV et pour une raison quelconque, je n'arrive pas à faire fonctionner CamShift en C++. Tout d'abord, si quelqu'un a un exemple de travail CamShift en utilisant l'interface C++, je l'apprécierais vraiment. Deuxièmement, j'essaie d'adapter l'exemple C à C++, juste pour le faire fonctionner. Rien d'extraordinaire, pour le moment. En fait, ce que je fais est la suivante:Problèmes avec CamShift sur l'interface OpenCV C++
// -----------------------
cv::Rect rect = /* some rectangle */;
cv::Mat img = /* some image */;
int bins = 16;
int sMin = 10;
int vMin = 10;
int vMax = 250;
cv::MatND hist(1, &bins, CV_8UC1);
cv::Rect searchWindow = rect;
cv::Mat roi = img(searchWindow);
cv::Mat hsv;
cv::cvtColor(roi, hsv, CV_RGB2HSV);
cv::Mat mask;
cv::inRange(hsv, cv::Scalar(0, sMin, vMin, 0), cv::Scalar(181, 256, vMax, 0), mask);
const int channel = 0;
float range[] = {0, 181};
const float* ranges[] = {range};
cv::calcHist(&hsv, 1, &channel, mask, hist, 1, &bins, ranges, true, false);
double histMax;
cv::minMaxLoc(hist, NULL, &histMax);
hist *= histMax ? 255.0/histMax : 0.0;
int channel = 0;
float range[] = {0, 256};
const float* ranges[] = {range};
cv::Mat bp;
cv::calcBackProject(&img, 1, &channel, hist, bp, ranges, 1, true);
cv::RotatedRect foundObject = cv::CamShift(bp, searchWindow,
cv::TermCriteria(cv::TermCriteria::COUNT | cv::TermCriteria::EPS, 10, 1));
// -----------------------
// -----------------------
// -----------------------
// -----------------------
Après cela, ce qui se passe est que l'intérieur cv :: Camshift(), en dépit des paramètres ayant des valeurs apparemment valides, OpenCV jette un cv :: Exception et plantages le message suivant:
OpenCV Error: Assertion failed (box.size.width >= 0 && box.size.height >= 0 && t
hickness <= 255) in unknown function, file ..\..\..\..\ocv\opencv\src\cxcore\cxd
rawing.cpp, line 1666
Il ne semble pas y avoir de bug lié à la base de données de suivi des bogues, alors ... qu'est-ce que je manque quelque chose, ici?