Я преобразую цветной NSImage в черно-белый (не в оттенках серого) NSImage, применяя фильтры CIF. Однако полученное изображение искажается из-за размытых краев исходного изображения.
Я новичок в Swift, и было бы замечательно, если бы кто-то мог помочь мне понять, где я ошибаюсь или как лучше всего получить четкое черно-белое изображение из цветного изображения?
Я пытался применить фильтр CICategorySharpen, но возвращаемое изображение равно nil, и Xcode прерывается. Когда я исключаю CICategorySharpen, преобразованное изображение искажается. Документация Apple пока не очень полезна. Я видел в Интернете подход к некоторым растровым изображениям, который не очень эффективен.
//url of NSImage
let ciImage = CIImage(contentsOf: url)!
// Sharpen the image - currently returns nil and Xcode aborts
let sharpImage = CIFilter(name: "CICategorySharpen", parameters: [kCIInputImageKey: ciImage] )?.outputImage
// Convert image into grayscale
let grayImage = CIFilter(name: "CIPhotoEffectNoir", parameters: [kCIInputImageKey: sharpImage])?.outputImage
// Convert into black and white
let bAndWParams: [String: Any] = [kCIInputImageKey: grayImage,
kCIInputContrastKey: 50.0,
kCIInputBrightnessKey: 10.0]
let blackAndWhiteImage = (CIFilter(name: "CIColorControls", parameters: bAndWParams)?.outputImage)!
//Convert back into NSImage
let rep = NSCIImageRep(ciImage: blackAndWhiteImage)
let nsImage = NSImage(size: rep.size)
nsImage.addRepresentation(rep)
Ожидается: четкое, резкое черно-белое изображение после применения фильтров CI независимо от качества исходного изображения.
Фактический:
1. Без CICategorySharpen, черно-белые изображения искажаются после преобразования.
2. Когда я добавляю CICategorySharpen, Xcode прерывается.