Преобразуйте цветной NSImage в чистый черно-белый NSImage, используя CIFilters в быстром - PullRequest
2 голосов
/ 17 мая 2019

Я преобразую цветной 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 прерывается.

...