“`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 項目中即可。

“`

Categorized in: