Sto provando a rilevare i bordi di un biglietto da visita (e disegnarli) con una fotocamera dell'iPhone, usando openCV. Sono nuovo in questo framework, oltre a Computer Vision o C++.iOS rileva i rettangoli dalla fotocamera con openCV
Sto cercando di utilizzare la soluzione spiegato qui: https://stackoverflow.com/a/14123682/3708095, quale progetto GitHub è https://github.com/foundry/OpenCVSquares
Funziona con un'immagine predefinita, ma sto cercando di farlo funzionare con la fotocamera.
Per farlo, sto usando il CvVideoCameraDelegate protocol
sua attuazione nel CVViewController.mm
come spiegano in http://docs.opencv.org/doc/tutorials/ios/video_processing/video_processing.html come questo:
#ifdef __cplusplus
-(void)processImage:(cv::Mat &)matImage
{
//NSLog (@"Processing Image");
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
matImage = CVSquares::detectedSquaresInImage(matImage, self.tolerance, self.threshold, self.levels, [self accuracy]);
UIImage *image = [[UIImage alloc]initWithCVMat:matImage orientation:UIImageOrientationDown];
dispatch_async(dispatch_get_main_queue(), ^{
self.imageView.image = image;
});
});
}
#endif
EDIT:
Se lo faccio come questo, mi dà un EXC_BAD_ACCESS ...
Se clonare il matImage prima di elaborarlo, registrandolo, sembra elaborare l'immagine e anche trovare i rettangoli, ma il rettangolo non viene disegnato per l'output dell'immagine per imageView.
cv::Mat temp = matImage.clone();
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIImage *image = [[UIImage alloc]CVSquares::detectedSquaresInImage(temp, self.tolerance, self.threshold, self.levels, [self accuracy])
orientation:UIImageOrientationDown];
dispatch_async(dispatch_get_main_queue(), ^{
self.imageView.image = image;
});
});
Sono abbastanza sicuro che mi manca qualcosa, probabilmente perché non sto passando correttamente qualche oggetto, puntatore ot di opporsi o giù di lì, e l'oggetto che ho bisogno di essere modificato non è.
In ogni caso, se questo non è l'approccio giusto, vorrei davvero apprezzare un tutorial o un esempio dove fanno qualcosa di simile, sia utilizzando OpenCV o GPUImage (che non hanno familiarità con esso sia) ...
È questo approccio è valido? Dovrei provare qualcos'altro? Grazie! – jdev