• pyCoreImage Learn


    PyCoreImage

    安装

    首先,需要下载安装包,下载地址:

    安装步骤:

    easy_install pip
    pip install setuptools --upgrade
    python setup.py --user
    pip install scikit-image --user
    

    pyci_demo.py文件头中也有注释,包含了安装说明

    # Install
        1. pip install pyobjc --ignore-installed --user
        2. pip install numpy --ignore-installed --user
        3. pip install scikit-image --user
    

    确保安装 ok:

    $ python
    >> from pycoreimage.pyci import cimg
    

    如果输出没有错误,那么代表安装 ok。

    如果运行上面的导入库,出现其他提示信息,代表安装有问题。需要卸载后重新安装。
    卸载方法 :

    1)列出已经安装的库列表,存入文件

    $ pip freeze > list.txt

    2)编辑list.txt ,筛选出带 pyobjc 和 pycoreimage 的库,然后保存。

    3)从文件中批量删除已经安装的库

    $ pip uninstall -r list.txt

    高斯模糊滤镜的例子

    源文件 gaussianBlur.py

    # coding: utf-8
    from pycoreimage.pyci import *
    def zxdemo_minimal(filepath):
    	#读取文件
        img = cimg.fromFile(filepath)
    	#图片缩放
        img = img.resize(500, preserveAspect=1)
    	#高斯模糊
        r = 20
        blur = img.gaussianBlur(radius=r)
    	#图片保存
        blur.save(filepath + '.CIGaussianBlur.jpg')
        #显示图片
        show([img, blur], title=['input', 'Gaussian blur with radius {}'.format(r)])
    zxdemo_minimal('/Users/zx/Downloads/2018bugs/201807/0705/cheers_1440x960.heic')
    

    可以使用 jupyter-notebook 边写边运行。

    使用详细步骤说明

    一般包含几个步骤:

    • 导入库文件 from pycoreimage.pyci import *

      pycoreimage supports all file formats that Core Image supports, including JPEG, PNG, and HEIC.

      支持 JGPE,PNG,HEIC 文件

    • 创建 cimg 对象

    fpath = 'resources/YourFacialImage.HEIC'
    image = cimg.fromFile(fpath)
    
    • 对图片添加滤镜
    gaussianBlurImg = image.gaussianBlur(radius=30)
    
    • 显示图片
    show([image, gaussianBlurImg], title=['input', 'Gaussian blur with radius {}'.format(r)])
    

    常见操作

    生成二维码

    cimg.fromGenerator('CIQRCodeGenerator', message='Hello World!')
    

    平移

    Shift the image by the amount (tx, ty) with the translate command:

    img.translate(tx, ty)
    

    缩放

    Use the scale command to resize an image:

    img.scale(sx, sy)
    

    旋转

    Rotate the image about its center point with the rotate command:

    img.rotate(radians)
    

    裁剪

    Crop the image to the rectangle [x, y, width, height] with the crop command:

    img.rotate(radians)
    

    保存

    img.save('demo2.jpg')
    

    显示

    show(img, title='Demo 2: from file + slicing')
    

    滤镜操作

    打印所有的滤镜列表

    所有的系统滤镜,从文档可以查到

    https://developer.apple.com/library/archive/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_intro/ci_intro.html#//apple_ref/doc/uid/TP30001185

    滤镜按照功能,被分进不同的类别

    源文件 listFilters.py

    # coding: utf-8
    from pycoreimage.pyci import *
    print(cimg.filters())
    
    $ python src/listFilters.py 
    (
        CIAccordionFoldTransition,
        CIAdditionCompositing,
        CIAffineClamp,
        CIAffineTile,
        CIAffineTransform,
        CIAreaAverage,
        CIAreaHistogram,
        CIAreaMaximum,
        CIAreaMaximumAlpha,
        CIAreaMinimum,
        CIAreaMinimumAlpha,
        CIAreaMinMaxRed,
        CIAttributedTextImageGenerator,
        CIAztecCodeGenerator,
        CIBarcodeGenerator,
        CIBarsSwipeTransition,
        CIBicubicScaleTransform,
        CIBlendWithAlphaMask,
        CIBlendWithBlueMask,
        CIBlendWithMask,
        CIBlendWithRedMask,
        CIBloom,
        CIBokehBlur,
        CIBoxBlur,
        CIBumpDistortion,
        CIBumpDistortionLinear,
        CICheckerboardGenerator,
        CICircleSplashDistortion,
        CICircularScreen,
        CICircularWrap,
        CIClamp,
        CICMYKHalftone,
        CICode128BarcodeGenerator,
        CIColorBlendMode,
        CIColorBurnBlendMode,
        CIColorClamp,
        CIColorControls,
        CIColorCrossPolynomial,
        CIColorCube,
        CIColorCubesMixedWithMask,
        CIColorCubeWithColorSpace,
        CIColorCurves,
        CIColorDodgeBlendMode,
        CIColorInvert,
        CIColorMap,
        CIColorMatrix,
        CIColorMonochrome,
        CIColorPolynomial,
        CIColorPosterize,
        CIColumnAverage,
        CIComicEffect,
        CIConstantColorGenerator,
        CIConvolution3X3,
        CIConvolution5X5,
        CIConvolution7X7,
        CIConvolution9Horizontal,
        CIConvolution9Vertical,
        CICopyMachineTransition,
        CICrop,
        CICrystallize,
        CIDarkenBlendMode,
        CIDepthBlurEffect,
        CIDepthOfField,
        CIDepthToDisparity,
        CIDifferenceBlendMode,
        CIDiscBlur,
        CIDisintegrateWithMaskTransition,
        CIDisparityToDepth,
        CIDisplacementDistortion,
        CIDissolveTransition,
        CIDivideBlendMode,
        CIDotScreen,
        CIDroste,
        CIEdgePreserveUpsampleFilter,
        CIEdges,
        CIEdgeWork,
        CIEightfoldReflectedTile,
        CIExclusionBlendMode,
        CIExposureAdjust,
        CIFalseColor,
        CIFlashTransition,
        CIFourfoldReflectedTile,
        CIFourfoldRotatedTile,
        CIFourfoldTranslatedTile,
        CIGammaAdjust,
        CIGaussianBlur,
        CIGaussianGradient,
        CIGlassDistortion,
        CIGlassLozenge,
        CIGlideReflectedTile,
        CIGloom,
        CIHardLightBlendMode,
        CIHatchedScreen,
        CIHeightFieldFromMask,
        CIHexagonalPixellate,
        CIHighlightShadowAdjust,
        CIHistogramDisplayFilter,
        CIHoleDistortion,
        CIHueAdjust,
        CIHueBlendMode,
        CIHueSaturationValueGradient,
        CIKaleidoscope,
        CILabDeltaE,
        CILanczosScaleTransform,
        CILenticularHaloGenerator,
        CILightenBlendMode,
        CILightTunnel,
        CILinearBurnBlendMode,
        CILinearDodgeBlendMode,
        CILinearGradient,
        CILinearToSRGBToneCurve,
        CILineOverlay,
        CILineScreen,
        CILuminosityBlendMode,
        CIMaskedVariableBlur,
        CIMaskToAlpha,
        CIMaximumComponent,
        CIMaximumCompositing,
        CIMedianFilter,
        CIMinimumComponent,
        CIMinimumCompositing,
        CIModTransition,
        CIMorphologyGradient,
        CIMorphologyMaximum,
        CIMorphologyMinimum,
        CIMotionBlur,
        CIMultiplyBlendMode,
        CIMultiplyCompositing,
        CINinePartStretched,
        CINinePartTiled,
        CINoiseReduction,
        CIOpTile,
        CIOverlayBlendMode,
        CIPageCurlTransition,
        CIPageCurlWithShadowTransition,
        CIParallelogramTile,
        CIPDF417BarcodeGenerator,
        CIPerspectiveCorrection,
        CIPerspectiveTile,
        CIPerspectiveTransform,
        CIPerspectiveTransformWithExtent,
        CIPhotoEffectChrome,
        CIPhotoEffectFade,
        CIPhotoEffectInstant,
        CIPhotoEffectMono,
        CIPhotoEffectNoir,
        CIPhotoEffectProcess,
        CIPhotoEffectTonal,
        CIPhotoEffectTransfer,
        CIPinchDistortion,
        CIPinLightBlendMode,
        CIPixellate,
        CIPointillize,
        CIQRCodeGenerator,
        CIRadialGradient,
        CIRandomGenerator,
        CIRippleTransition,
        CIRowAverage,
        CISaturationBlendMode,
        CIScreenBlendMode,
        CISepiaTone,
        CIShadedMaterial,
        CISharpenLuminance,
        CISixfoldReflectedTile,
        CISixfoldRotatedTile,
        CISmoothLinearGradient,
        CISoftLightBlendMode,
        CISourceAtopCompositing,
        CISourceInCompositing,
        CISourceOutCompositing,
        CISourceOverCompositing,
        CISpotColor,
        CISpotLight,
        CISRGBToneCurveToLinear,
        CIStarShineGenerator,
        CIStraightenFilter,
        CIStretchCrop,
        CIStripesGenerator,
        CISubtractBlendMode,
        CISunbeamsGenerator,
        CISwipeTransition,
        CITemperatureAndTint,
        CITextImageGenerator,
        CIThermal,
        CIToneCurve,
        CITorusLensDistortion,
        CITriangleKaleidoscope,
        CITriangleTile,
        CITwelvefoldReflectedTile,
        CITwirlDistortion,
        CIUnsharpMask,
        CIVibrance,
        CIVignette,
        CIVignetteEffect,
        CIVortexDistortion,
        CIWhitePointAdjust,
        CIXRay,
        CIZoomBlur
    )
    

    打印某个滤镜的详细信息

    源文件detailFliterInfo.py

    # coding: utf-8
    from pycoreimage.pyci import *
    print(cimg.inputs('gaussianBlur'))
    print(cimg.inputs('additionCompositing'))
    

    输出:

    $ python python/PyCoreImage/src/detailFliterInfo.py
    {
        "CIAttributeFilterAvailable_Mac" = "10.4";
        "CIAttributeFilterAvailable_iOS" = 6;
        CIAttributeFilterCategories =     (
            CICategoryBlur,
            CICategoryStillImage,
            CICategoryVideo,
            CICategoryBuiltIn
        );
        CIAttributeFilterDisplayName = "Gaussian Blur";
        CIAttributeFilterName = CIGaussianBlur;
        CIAttributeReferenceDocumentation = "http://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIGaussianBlur";
        inputImage =     {
            CIAttributeClass = CIImage;
            CIAttributeDescription = "The image to use as an input image. For filters that also use a background image, this is the foreground image.";
            CIAttributeDisplayName = Image;
            CIAttributeType = CIAttributeTypeImage;
        };
        inputRadius =     {
            CIAttributeClass = NSNumber;
            CIAttributeDefault = 10;
            CIAttributeDescription = "The radius determines how many pixels are used to create the blur. The larger the radius, the blurrier the result.";
            CIAttributeDisplayName = Radius;
            CIAttributeIdentity = 0;
            CIAttributeMin = 0;
            CIAttributeSliderMax = 100;
            CIAttributeSliderMin = 0;
            CIAttributeType = CIAttributeTypeScalar;
        };
    }
    {
        "CIAttributeFilterAvailable_Mac" = "10.4";
        "CIAttributeFilterAvailable_iOS" = 5;
        CIAttributeFilterCategories =     (
            CICategoryCompositeOperation,
            CICategoryVideo,
            CICategoryStillImage,
            CICategoryInterlaced,
            CICategoryNonSquarePixels,
            CICategoryHighDynamicRange,
            CICategoryBuiltIn
        );
        CIAttributeFilterDisplayName = Addition;
        CIAttributeFilterName = CIAdditionCompositing;
        CIAttributeReferenceDocumentation = "http://developer.apple.com/library/mac/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIAdditionCompositing";
        inputBackgroundImage =     {
            CIAttributeClass = CIImage;
            CIAttributeDescription = "The image to use as a background image.";
            CIAttributeDisplayName = "Background Image";
            CIAttributeType = CIAttributeTypeImage;
        };
        inputImage =     {
            CIAttributeClass = CIImage;
            CIAttributeDescription = "The image to use as an input image. For filters that also use a background image, this is the foreground image.";
            CIAttributeDisplayName = Image;
            CIAttributeType = CIAttributeTypeImage;
        };
    }
    

    滤镜的详细信息和使用 OC 打印结果相同。

    使用 zoomBlur 滤镜

    源文件 CIZoomBlur.py

    # coding: utf-8
    from pycoreimage.pyci import *
    
    # read imag file
    filepath = '/Users/zx/Downloads/2018bugs/201807/0705/cheers_1440x960.heic'
    img = cimg.fromFile(filepath)
    
    # apply zoomBlur
    r1 = img.zoomBlur()
    r2 = img.zoomBlur(center=[500,500],amount=10)
    
    #show images
    
    show([img, r1,r2], title=['src', 'r1','r2'])
    
    # https://developer.apple.com/library/archive/documentation/GraphicsImaging/Reference/CoreImageFilterReference/#//apple_ref/doc/filter/ci/CIZoomBlur
    

    可以看到,使用滤镜的时候,参数名称有变化。

    原来的 inputCenter,inputAmout 分别变为了center,amout.

    使用 mono 滤镜

    源文件 CIPhotoEffectMono.py

    # coding: utf-8
    from pycoreimage.pyci import *
    
    # read imag file
    filepath = '/Users/zx/Downloads/2018bugs/201807/0705/cheers_1440x960.heic'
    img = cimg.fromFile(filepath)
    
    # print filter info
    print(cimg.inputs('photoEffectMono'))
    
    # apply photoEffectMono
    r = img.photoEffectMono()
    
    #show images
    show([img, r], title=['src', 'r'])
    

    使用叠加率滤镜

    源文件 CILightenBlendMode.py

    # coding: utf-8
    from pycoreimage.pyci import *
    
    # read imag file
    filepath = '/Users/zx/Downloads/2018bugs/201807/0705/cheers_1440x960.heic'
    img = cimg.fromFile(filepath)
    
    backgourdImg = cimg.fromFile('/Users/zx/Downloads/zx.jpg')
    
    # apply 
    r1 = img.additionCompositing(backgroundImage=backgourdImg)
    r2 = img.colorBlendMode(backgroundImage=backgourdImg)
    r3 = img.colorBurnBlendMode(backgroundImage=backgourdImg)
    r4 = img.colorDodgeBlendMode(backgroundImage=backgourdImg)
    r5 = img.darkenBlendMode(backgroundImage=backgourdImg)
     # = img.DifferenceBlendMode
     # = img.DivideBlendMode
     # = img.ExclusionBlendMode
     # = img.HardLightBlendMode
     # = img.HueBlendMode
     # = img.LightenBlendMode
     # = img.LinearBurnBlendMode
     # = img.LinearDodgeBlendMode
     # = img.LuminosityBlendMode
     # = img.MaximumCompositing
     # = img.MinimumCompositing
     # = img.MultiplyBlendMode
     # = img.MultiplyCompositing
     # = img.OverlayBlendMode
     # = img.PinLightBlendMode
     # = img.SaturationBlendMode
     # = img.ScreenBlendMode
     # = img.SoftLightBlendMode
     # = img.SourceAtopCompositing
     # = img.SourceInCompositing
     # = img.SourceOutCompositing
     # = img.SourceOverCompositing
     # = img.SubtractBlendMode
    
    #show images
    show([img,r1,r2,r3,r4,r5])
    

    参考资料

  • 相关阅读:
    使用八爪鱼采集所需信息
    一些小疑问&解答
    第一页的简单爬取
    【不解决了】对Spark源码进行编译
    python学习中的序列函数
    关于python中的小知识总结
    python学习13之数据泄密
    python学习12之梯度推进
    python学习11之交叉验证
    python学习10之管道清理建模
  • 原文地址:https://www.cnblogs.com/xilifeng/p/9269066.html
Copyright © 2020-2023  润新知