用CvVideoCamera拍照

时间:2015-10-28 17:17:19

标签: ios opencv objective-c++

我正在尝试在我的iOS应用中实现OpenCV。

CvVideoCamera很棒,因为它有一个委托方法让我可以处理相机预览的每一帧,但我不知道如何提取一帧并将其保存为图像(也就是拍照)。

我该如何实现?

由于

2 个答案:

答案 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);
}

我唯一的问题是质量问题。我怎么能提高他的质量?

祝你好运, 纳扎尔