gpt4 book ai didi

swift - 如何从 CIRowAverage 过滤器中获取值?

转载 作者:行者123 更新时间:2023-11-28 07:55:27 24 4
gpt4 key购买 nike

我正在尝试使用 Apple 的 CIRowAverage Core Image 过滤器来计算图像每行的平均值。当我运行过滤器并尝试读出这些值时,我根本得不到平均值:根据我所能知道的某行有值的地方,它返回 255 而某行没有值(即,全 0),它返回 0。

那么,我是不是用错了 CIRowAverage 还是我误解了它的用法?

我是这样调用它的:

let row = ciimage.applyingFilter("CIRowAverage", parameters: ["inputExtent": CIVector(cgRect: ciimage.extent)])

let width = Int(ciimage.extent.width)
let height = Int(ciimage.extent.height)
let bufferSize = width * height * 4
var buffer = [UInt8](repeating: 0, count: bufferSize)
let colorSpace = CGColorSpaceCreateDeviceRGB()
let context = CGContext(data: &buffer, width: width, height: height, bitsPerComponent: 8, bytesPerRow: 4 * width, space: colorSpace, bitmapInfo: CGImageAlphaInfo.noneSkipLast.rawValue)!
let ciContext = CIContext(cgContext: context, options: [kCIContextWorkingColorSpace: colorSpace, kCIContextUseSoftwareRenderer: false])
ciContext.draw(self, in: self.extent, from: self.extent)
return buffer

最佳答案

首先,我认为您正确地理解了过滤器的作用。我从未使用过它(或任何缩减过滤器),但我认为您使用的一个像素输出可能是错误的。

尝试以这种方式呈现输出:

// I'm assuming you are passing a single row here but your ROI suggests maybe not

let row = ciimage.applyingFilter("CIRowAverage", parameters: ["inputExtent": CIVector(cgRect: ciimage.extent)])

// Create a CIContext, then a CGImage, and finally a UIImage

let ciCtx = CIContext()
let cgImage = renderContext.createCGImage(row, from: ciimage.extent)
let uiImage = UIImage(cgImage: cgImage)

您没有发布代码来表明 climate.extent 是什么或 self 是什么,所以请记住以下几点:

  • 我认为输入的 ROI 应该是一行图像。
  • 输出只有一个像素高,大小为inputCount
  • 创建 CIContexts 是一件非常昂贵的事情,所以尽量只创建一个。
  • 如果您试图以行的平均颜色的单个图像结束,请相应地更改您的代码(和我的代码)。

注意:请记住,CoreImage 的“原点”位于左下角,而不是左上角。也就是说,UIKit 或 CoreGraphics 之类的东西将 0,0 的 X/Y 定位为左上角,而 CoreImage 将 0,0 定位为左下角。

关于swift - 如何从 CIRowAverage 过滤器中获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48231378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com