[英]how to detect if image from photo library was taken by iPhone camera or imported
[英]Image quality taken by iPhone camera
我使用iPhone相机在iOS APP中捕获图像。 AVCaptureVideoDataOutputSampleBufferDelegate用于从iPhone相机获取图像。 该程序的一部分如下所示。
AVCaptureDevice *videoDevice = [AVCamViewController deviceWithMediaType:AVMediaTypeVideo preferringPosition:AVCaptureDevicePositionBack];
AVCaptureDeviceInput *videoDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:&error];
if (error) { NSLog(@"%@", error); }
if ([session canAddInput:videoDeviceInput])
{
[session addInput:videoDeviceInput]; [self setVideoDeviceInput:videoDeviceInput];
dispatch_async(dispatch_get_main_queue(), ^{
[[(AVCaptureVideoPreviewLayer *)[[self previewView] layer] connection] setVideoOrientation:(AVCaptureVideoOrientation)[self interfaceOrientation]]; });
}
AVCaptureVideoDataOutputSampleBufferDelegate拍摄的图像质量与iPhone的相机应用拍摄的图像质量有很大不同。 在AVCaptureVideoDataOutputSampleBufferDelegate上要调整哪些参数以使其具有与相机应用相同或接近的质量? 附有两个图像。 第二张图像是由iPhone相机的应用程序拍摄的。 谢谢
编辑:我可以查明问题出在哪里。 我在UIImage到cvMat转换之前和之后打印两个图像。 在UIImage格式下,图像质量很好。 转换后,质量变差,颜色改变等。我在前后附加了两个图像。 第一个是之前。 我使用以下代码进行转换。
- (cv::Mat)cvMatFromUIImage:(UIImage *)image
{
CGColorSpaceRef colorSpace = CGImageGetColorSpace(image.CGImage);
CGFloat cols = image.size.width;
CGFloat rows = image.size.height;
cv::Mat cvMat(rows, cols, CV_8UC4); // 8 bits per component, 4 channels (color channels + alpha)
CGContextRef contextRef = CGBitmapContextCreate(cvMat.data, // Pointer to data
cols, // Width of bitmap
rows, // Height of bitmap
8, // Bits per component
cvMat.step[0], // Bytes per row
colorSpace, // Colorspace
kCGImageAlphaNoneSkipLast |
kCGBitmapByteOrderDefault); // Bitmap info flags
CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), image.CGImage);
CGContextRelease(contextRef);
return cvMat;
}
将图像写入jpg文件应该没有问题。 但这是保存图像的代码
- (void) saveImage:(std::string)name img:(Mat)gray{
//Print
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%3s.jpg", name.c_str()]];
const char* cPath = [filePath cStringUsingEncoding:NSMacOSRomanStringEncoding];
const cv::String newPaths = (const cv::String)cPath;
//Save as Bitmap to Documents-Directory
cv::imwrite(newPaths, gray);
}
从UIImage到cvMat的转换代码非常标准,为什么会有这个问题?
您可以使用sessionPreset
控制捕获输入信号的质量阅读更多在这里
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.