[英]iOS detect rectangles from camera with openCV
我正在嘗試使用openCV用iPhone相機檢測名片的邊緣(並繪制它們)。 我是這個框架的新手,以及計算機視覺或C ++。
我正在嘗試使用此處解釋的解決方案: https : //stackoverflow.com/a/14123682/3708095 ,其中github項目是https://github.com/foundry/OpenCVSquares
它適用於預定義的圖像,但我正在嘗試使用相機。
為此,我正在使用CvVideoCameraDelegate protocol
在CVViewController.mm
實現它,就像他們在http://docs.opencv.org/doc/tutorials/ios/video_processing/video_processing.html中解釋一樣:
#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
編輯:
如果我這樣做,它給了我一個EXC_BAD_ACCESS ...
如果我在處理它之前克隆matImage,通過記錄它,它似乎處理圖像甚至找到矩形,但矩形不會被繪制到圖像輸出到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;
});
});
我很確定我錯過了一些東西,可能是因為我沒有正確傳遞某個對象,指向對象的指針等等,而我需要修改的對象則沒有。
無論如何,如果這不是正確的方法,我真的很感謝他們做這樣的事情的教程或例子,使用openCV或GPUImage (也不熟悉它)......
所以解決方案實際上非常簡單......
而不是試圖用matImage
設置imageView.image
,它只是需要變換matImage
在ImageView的實際修改,因為CvVideoCamera已經與初始化(和鏈接)的ImageView的:
self.videoCamera = [[CvVideoCamera alloc]initWithParentView:self.imageView];
最后這個功能是這樣的:
#ifdef __cplusplus
-(void)processImage:(cv::Mat &)matImage
{
matImage = CVSquares::detectedSquaresInImage(matImage, self.angleTolerance, self.threshold, self.levels, self.accuracy);
}
#endif
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.