“`html
Swift 2025 程式教學:CIColorKernel 顏色過濾
過濾顏色
在本教學中,我們將學習如何使用 CIColorKernel 來過濾顏色。這個方法可以用於綠幕效果或其他需要顏色處理的應用。
以下代碼將圖片中 RGB 值小於 0.2 的顏色改為黑色,其餘顏色改為白色。

kernel vec4 thresholdFilter(__sample textureColor) {
    if (textureColor.r < 0.2 && textureColor.g < 0.2 && textureColor.b < 0.2) {
        textureColor.rgb = vec3(0.0, 0.0, 0.0);
    } else {
        textureColor.rgb = vec3(1.0, 1.0, 1.0);
    }
    return textureColor;
}
擴展 UIImage 的顏色過濾功能
我們將為 UIImage 添加一個擴展,實現自定義的顏色過濾功能。
extension UIImage {
    /// 應用自定義的顏色過濾
    func applyCustomCIFilter() -> UIImage {
        guard let ciInputImage = CIImage(image: self) else { return UIImage() }
        
        let replaceGrayKernel = CIColorKernel(source:
            """
            kernel vec4 thresholdFilter(__sample textureColor) {
                if (textureColor.r < 0.2 && textureColor.g < 0.2 && textureColor.b < 0.2) {
                    textureColor.rgb = vec3(0.0, 0.0, 0.0);
                } else {
                    textureColor.rgb = vec3(1.0, 1.0, 1.0);
                }
                return textureColor;
            }
            """
        )
        
        let ciImageFiltered = replaceGrayKernel?.apply(
            extent: ciInputImage.extent,
            arguments: [ciInputImage])
        return UIImage(ciImage: ciImageFiltered!)
    }
}
證件過濾的應用案例
這種顏色過濾技術特別適合於自動識別(OCR)系統,能夠更好地處理和識別文本和圖案。

其他應用與最佳實踐
除了用於綠幕和OCR,這種顏色過濾技術還可以應用於創建特殊效果的圖像處理。您可以根據需要調整閾值以實現不同的過濾效果。
Q&A(常見問題解答)
Q1: CIColorKernel 的性能如何?
A1: CIColorKernel 在處理大量圖像時表現良好,但性能會根據圖像大小和過濾的複雜度而異。建議在實際使用中進行測試以優化性能。
Q2: 如何調整過濾效果?
A2: 您可以通過修改 thresholdFilter 函數中的閾值(如0.2)來調整過濾效果,從而改變哪些顏色被轉換為黑色或白色。
Q3: 這個技術可以用於 iOS 應用嗎?
A3: 是的,這個技術完全可以用於 iOS 應用,您只需將上述代碼整合到您的 iOS 項目中即可。
“`
 —
