После сканирования документа я применяю обработку изображений с использованием библиотеки OpenCV. Я не получаю качество отсканированного документа, как приложение Scannable iOS.
Я использую ниже код для обработки изображений:
- (UIImage *)applyImageProcessing:(UIImage *)aImage
{
cv::Mat originalMat = [self cvMatFromUIImage:aImage];
cv::Mat dest_mat(aImage.size.width, aImage.size.height, CV_8UC4);
cv::Mat intermediate_mat(aImage.size.width, aImage.size.height, CV_8UC4);
cv::multiply(originalMat, 0.5, intermediate_mat);
cv::add(originalMat, intermediate_mat, dest_mat);
return [self UIImageFromCVMat:dest_mat];
}
- (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, // Color space
kCGImageAlphaNoneSkipLast
| kCGBitmapByteOrderDefault); // Bitmap info flags
CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), image.CGImage);
CGContextRelease(contextRef);
return cvMat;
}
- (UIImage *)UIImageFromCVMat:(cv::Mat)cvMat
{
NSData *data = [NSData dataWithBytes:cvMat.data length:cvMat.elemSize()*cvMat.total()];
CGColorSpaceRef colorspace;
if (cvMat.elemSize() == 1)
{
colorspace = CGColorSpaceCreateDeviceGray();
}
else
{
colorspace = CGColorSpaceCreateDeviceRGB();
}
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
// Create CGImage from cv::Mat
CGImageRef imageRef = CGImageCreate(cvMat.cols, cvMat.rows, 8, 8 * cvMat.elemSize(), cvMat.step[0], colorspace, kCGImageAlphaNone | kCGBitmapByteOrderDefault, provider, NULL, false, kCGRenderingIntentDefault);
// get uiimage from cgimage
UIImage *finalImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorspace);
return finalImage;
}
Мое приложение Отсканированное качество и четкость документа
Сканируемое приложение iOS Отсканированное качество и четкость документа
Как я могу получить результат моего отсканированного документа, например, как приложение scannble?
Исходное изображение:
Сканируемое приложение оригинального изображения: