我正在尝试在我的iOS应用中实现OpenCV。
CvVideoCamera很棒,因为它有一个委托方法让我可以处理相机预览的每一帧,但我不知道如何提取一帧并将其保存为图像(也就是拍照)。
我该如何实现?
由于
答案 0 :(得分:0)
我找到了一种用CvVideoCamera拍照的简单方法。它不是一种理想的方法,但它很容易。在另一个线程上,他们建议覆盖opencv相机方法。 (Capturing a still image from camera in OpenCV Mat format)
在我的方法中,你只需要一个名为taken_image的额外属性,以及一个拍照的方法。
@property cv::Mat taken_image;
- (void)processImage:(cv::Mat&)image {
// Some processing over the image
...
self.taken_image = image.clone();
}
- (IBAction)takePhoto:(id)sender {
printf("Take Photo..\n");
[camera stop];
cv::Mat rgb_image;
cv::Mat bgr_image = _taken_image.clone();
// Change the color scheme for iOS
cv::cvtColor(bgr_image, rgb_image, CV_RGB2BGR);
// Here you have your image
UIImage *img = MatToUIImage(rgb_image);
...
...
[self dismissViewControllerAnimated:YES completion:nil];
}
答案 1 :(得分:0)
嗯..我的解决方案也是最好的方法,但它仍然有效。我要做我保存到相册的屏幕截图。这是我的代码
-(IBAction)takePhoto:(id)sender {
UIGraphicsBeginImageContext(imageView.frame.size);
[imageView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
CGRect cropRect = CGRectMake(0 ,0 ,imageView.frame.size.width,imageView.frame.size.height);
CGImageRef imageRef = CGImageCreateWithImageInRect([screenshot CGImage], cropRect);
CGImageRelease(imageRef);
UIImageWriteToSavedPhotosAlbum(screenshot , nil, nil, nil);
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(screenshot , nil, nil, nil);
}
我唯一的问题是质量问题。我怎么能提高他的质量?
祝你好运, 纳扎尔