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。

pyCoreImage Learn

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

卸载方法 :

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,
*wAverage,
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

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

pyCoreImage Learn

原来的 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])

pyCoreImage Learn

参考资料

上一篇:Machine Learning week3-ANN(1)


下一篇:Features of C Language