Desidero limitare un parametro SurfFeature a un insieme di regioni (maschera). Per un test definisco una sola maschera:OpenCV: utilizzo del parametro maschera per il rilevamento del punto funzione (SURF)
Mat srcImage; //RGB source image
Mat mask = Mat::zeros(srcImage.size(), srcImage.type());
Mat roi(mask, cv::Rect(10,10,100,100));
roi = Scalar(255, 255, 255);
SurfFeatureDetector detector();
std::vector<KeyPoint> keypoints;
detector.detect(srcImage, keypoints, roi); // crash
//detector.detect(srcImage, keypoints); // does not crash
quando passo il "roi", come la maschera ottengo questo errore:
OpenCV Error: Assertion failed (mask.empty() || (mask.type() == CV_8UC1 && mask.size() == image.size())) in detect, file /Users/ux/Downloads/OpenCV-iOS/OpenCV-iOS/../opencv-svn/modules/features2d/src/detectors.cpp, line 63
Cosa c'è di sbagliato in questo? Come posso passare correttamente una maschera al metodo "detect" di SurfFeatureDetector?
saluti,
Grazie, questo funziona. – Hyndrix
Penso che dovrebbe essere 'Scalare (255);' come la maschera è monodimensionale. –
'roi' ha 3 canali, come' srcImage' ('roi' è una sottomatrice di' srcImage') – Alexey