【发布时间】:2021-06-29 00:45:01
【问题描述】:
我正在使用过滤器CIAreaMinMax 从图像中获取最亮和最暗的颜色信息。
过滤器通常应该输出具有两个像素(最亮和最暗)的图像。但是,当我对包含两种相似颜色的图像实施此过滤器时,结果将不正确。结果不正确的症状是,两个像素的红色通道已经切换,但G和B的值没有问题。
我使用的测试图片是here,一个png图片只包含两种颜色:
RGB(37,62,88), GRB(10,132,255).
经过代码处理后,会输出一个包含两个像素的png图片:
RGB(10,62,88), GRB(37,132,255).
下面是 swift playground 的测试代码:
import Cocoa
import CoreImage
import CoreGraphics
func saveImage(_ image: NSImage, atUrl url: URL) {
let cgImage = image.cgImage(forProposedRect: nil, context: nil, hints: nil)!
let newRep = NSBitmapImageRep(cgImage: cgImage)
newRep.size = image.size
let pngData = newRep.representation(using: .png, properties: [:])!
try! pngData.write(to: url)
}
var sourceImage = CIImage.init(contentsOf: URL.init(fileURLWithPath: "/Users/ABC/Downloads/test.png"))!
let filter = CIFilter(name: "CIAreaMinMax")!
filter.setValue(sourceImage, forKey: kCIInputImageKey)
let civ = CIVector.init(x: sourceImage.extent.minX, y: sourceImage.extent.minY, z: sourceImage.extent.width, w: sourceImage.extent.height)
filter.setValue(civ, forKey: kCIInputExtentKey)
var filteredImage = filter.outputImage!
let context = CIContext(options: [.workingColorSpace: kCFNull!])
let filteredCGImageRef = context.createCGImage(
filteredImage,
from: filteredImage.extent)
let output = NSImage(cgImage: filteredCGImageRef!, size: NSSize.init(width: filteredImage.extent.width, height: filteredImage.extent.height))
saveImage(output, atUrl: URL.init(fileURLWithPath: "/Users/ABC/Downloads/output.png"))
【问题讨论】:
标签: swift core-image cifilter