按颜色过滤图像中的像素 Swift
Filter Pixels in Image by Color Swift
我的项目是使用 Vision 来识别视野中的某个矩形。我知道这个矩形会有某种颜色。在 OpenCV 中,有一个过滤器可以让您按颜色过滤像素,如 here 所示。
我是 CoreImage 框架的新手,但我看不到任何可以实现此目标的过滤器。为此,是否有某种内置过滤器(它不一定必须在 CoreImage 中),还是我需要学习如何编写自己的过滤器?
目标
根据给定 link 下的信息,我了解到您希望将红色区域过滤为白色,将所有其他区域过滤为黑色。
为此可以使用 CIColorKernel。
CIColorKernel
A GPU-based image processing routine that processes only the color information in images, used to create custom Core Image filters.
见https://developer.apple.com/documentation/coreimage/cicolorkernel
截图
这里是一张背景颜色不好看的屏幕截图,可以更好地查看图像覆盖的区域。
在上方区域显示输入图像。在下方区域显示生成的图像。
来源
import UIKit
import CoreImage
class ViewController: UIViewController {
@IBOutlet weak var upperImageView: UIImageView!
@IBOutlet weak var lowerImageView: UIImageView!
let kernelString =
"""
kernel vec4 thresholdFilter(__sample textureColor) {
if (textureColor.r > 0.8 && textureColor.g < 0.1 && textureColor.b < 0.1) {
textureColor.rgb = vec3(1.0, 1.0, 1.0);
} else {
textureColor.rgb = vec3(0.0, 0.0, 0.0);
}
return textureColor;
}
"""
let kernel: CIColorKernel
required init?(coder aDecoder: NSCoder) {
self.kernel = CIColorKernel(source: kernelString)!
super.init(coder: aDecoder)
}
override func viewDidLoad() {
super.viewDidLoad()
self.upperImageView.image = UIImage(named: "example.png")
}
@IBAction func onFilter(_ sender: Any) {
guard let inputImage = upperImageView.image else { return }
guard let ciInputImage = CIImage(image: inputImage) else { return }
let ciImageFiltered = self.kernel.apply(
extent: ciInputImage.extent,
arguments: [ciInputImage])
let filteredImage = UIImage(ciImage: ciImageFiltered!)
self.lowerImageView.image = filteredImage
}
}
这就是你要找的吗?
我的项目是使用 Vision 来识别视野中的某个矩形。我知道这个矩形会有某种颜色。在 OpenCV 中,有一个过滤器可以让您按颜色过滤像素,如 here 所示。
我是 CoreImage 框架的新手,但我看不到任何可以实现此目标的过滤器。为此,是否有某种内置过滤器(它不一定必须在 CoreImage 中),还是我需要学习如何编写自己的过滤器?
目标
根据给定 link 下的信息,我了解到您希望将红色区域过滤为白色,将所有其他区域过滤为黑色。
为此可以使用 CIColorKernel。
CIColorKernel
A GPU-based image processing routine that processes only the color information in images, used to create custom Core Image filters.
见https://developer.apple.com/documentation/coreimage/cicolorkernel
截图
这里是一张背景颜色不好看的屏幕截图,可以更好地查看图像覆盖的区域。
在上方区域显示输入图像。在下方区域显示生成的图像。
来源
import UIKit
import CoreImage
class ViewController: UIViewController {
@IBOutlet weak var upperImageView: UIImageView!
@IBOutlet weak var lowerImageView: UIImageView!
let kernelString =
"""
kernel vec4 thresholdFilter(__sample textureColor) {
if (textureColor.r > 0.8 && textureColor.g < 0.1 && textureColor.b < 0.1) {
textureColor.rgb = vec3(1.0, 1.0, 1.0);
} else {
textureColor.rgb = vec3(0.0, 0.0, 0.0);
}
return textureColor;
}
"""
let kernel: CIColorKernel
required init?(coder aDecoder: NSCoder) {
self.kernel = CIColorKernel(source: kernelString)!
super.init(coder: aDecoder)
}
override func viewDidLoad() {
super.viewDidLoad()
self.upperImageView.image = UIImage(named: "example.png")
}
@IBAction func onFilter(_ sender: Any) {
guard let inputImage = upperImageView.image else { return }
guard let ciInputImage = CIImage(image: inputImage) else { return }
let ciImageFiltered = self.kernel.apply(
extent: ciInputImage.extent,
arguments: [ciInputImage])
let filteredImage = UIImage(ciImage: ciImageFiltered!)
self.lowerImageView.image = filteredImage
}
}
这就是你要找的吗?