当前位置: 首页 > 编程日记 > 正文

【笔记】PIL 中的 Image 模块

 Image 模块提供了一个同名类(Image),也提供了一些工厂函数,包括从文件中载入图片和创建新图片。例如,以下的脚本先载入一幅图片,将它旋转 45 度角,并显示出来:

1 >>>from PIL import Image
2  >>>im = Image.open("j.jpg")
3  >>>im.rotate(45).show()

下面这个脚本则创建了当前目录下所有以 .jpg 结尾的图片的缩略图。

Create thumbnail

 Image 类中的函数

0.    new : 这个函数创建一幅给定模式(mode)和尺寸(size)的图片。如果省略 color 参数,则创建的图片被黑色填充满,如果 color 参数是 None 值,则图片还没初始化。

new

1.    open : 打开并识别所提供的图像文件。不过,使用这函数的时候,真正的图像数据在你进行数据处理之前并没有被读取出来。可使用 load 函数进行强制加载。 mode 参数可以省略,但它只能是 "r" 值。

open

2.    blend : 使用两幅给出的图片和一个常量 alpha 创建新的图片。两幅图片必须是同样的 size 和 mode 。

blend

3.    composite : 使用两幅给出的图片和一个与 alpha 参数相似用法的 mask 参数,其值可为:"1", "L", "RGBA" 。两幅图片的 size 必须相同。

composite

4.    eval : 使用带一个参数的函数作用于给定图片的每一个像素。如果给定的图片有超过一个的 频段(band),则该函数也会作用于每一个频段。注意,该函数是每一个像素计算一次,所以不能使用一些随机组件或其他的生成器。

eval

5.    frombuffer : (PIL 1.1.4 中新添加的)使用标准 "raw" 解码器在像素数据或是对象缓存中创建一个图像副本。不是所有的模式都支持这种用法。支持的 mode 有"L", "RGBX", "RGBA", "CMYK"。

frombuffer

6.    fromstring : 注意,这个函数只对像素数据进行解码,而不是一整张图片。如果你有一整张字符串格式的图片,使用 StringIO 对其进行包装并用 open 函数载入它。

fromstring

7.    merge : 使用一系列单一频段(band)的图像来创建新的一幅图像。频段是以一些图像组成的元组或列表,所有的 band 必须有相同大小的 size 。

merge

 Image 类中的方法

0.    convert : 返回一个转换后的图像的副本。

convert

下面是一个例子:转换 RGB 为 XYZ 。

RGB2XYZ

1.    copy : 复制图像。如果你希望粘贴一些东西进图像里面的话可以使用这个方法,但仍然会保留原图像。

copy

2.    crop : 返回图像某个给定区域。box 是一个 4 元素元组,定义了 left, upper, right, lower 像素坐标。使用这个方法的时候,如果改变原始图像,可能会,也可能不会改变裁剪生成的图像。创建一个完全的复制,裁剪复制的时候使用 load 方法。

crop

3.    draft : 按给出的 mode 和 size 进行配置。可以使用这个方法将彩色JPEG图片转为灰度图。

draft

4.    filter : 返回图像使用滤波器后的副本。可以看 这里 获取更多有用的滤波器。

filter

5.    fromstring : 和前面的函数是一样的功能,不过这个方法是将数据载入到当前图像。

fromstring

6.    getbands : 返回一个元组,包含每一个 band 的名字,比如,在一幅 RGB 格式的图像上使用 getbands 则返回("R", "G", "B")。

getbands

7.    getbbox : 计算图像边框值,返回一个 4-元组 ,值为(左,上,右,下)。

getbbox

8.    getcolors : 在 1.1.5 版本中新添加的。返回一个未排序列表,其元素是元组(count, color)。the count is the number of times the corresponding color occurs in the image 。If the maxcolors value is exceeded, the method stops counting and returns None。

getcolors

9.    getdata : 返回一个图像内容的像素值序列。不过,这个返回值是 PIL 内部的数据类型,只支持确切的序列操作符,包括迭代器和基本序列方法。我们可以通过 list(im.getdata())  为其生成普通的序列。

getdata

10.    getextrema : 返回一个 2-元组 ,值为图像的最小最大值。在当前PIL版本中,仅支持单一频段(single-band)的图像。

getextreme

11.    getpixel : 返回指定位置的像素,如果所打开的图像是多层次的图片,那这个方法就返回一个元组。

getpixel

12.    histogram : 返回图像直方图,值为像素计数组成的列表。如果有参数 mask ,则返回图像所有部分的直方图。

histogram

13.    load : 版本 1.1.6 新添加的。load 返回对象的像素值,可以用来修改像素值。

load

14.    paste : 1). 粘贴新图片至图片中,box 参数可以为 2-元组(upper, left)或是 4-元组(left, upper, right, lower),或者是 None(0, 0)。2). 功能同上。不过是将指定位置填充为某种颜色。

paste

15.    point :

point

------------

 

Python图像处理库PIL的基本概念

PIL中所涉及的基本概念有如下几个:通道(bands)、模式(mode)、尺寸(size)、坐标系统(coordinate system)、调色板(palette)、信息(info)和滤波器(filters)。

1、  通道

每张图片都是由一个或者多个数据通道构成。PIL允许在单张图片中合成相同维数和深度的多个通道。

以RGB图像为例,每张图片都是由三个数据通道构成,分别为R、G和B通道。而对于灰度图像,则只有一个通道。

对于一张图片的通道数量和名称,可以通过方法getbands()来获取。方法getbands()是Image模块的方法,它会返回一个字符串元组(tuple)。该元组将包括每一个通道的名称。

Python的元组与列表类似,不同之处在于元组的元素不能修改,元组使用小括号,列表使用方括号,元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

方法getbands()的使用如下:

>>>from PIL import Image

>>> im= Image.open('D:\\Code\\Python\\test\\img\\1.jpg')

>>>im.getbands()

('R', 'G', 'B')

>>>im_bands = im.getbands()

>>>len(im_bands)

3

>>>print im_bands[0]

R

>>>print im_bands[1]

G

>>>print im_bands[2]

B

2、  模式

图像的模式定义了图像的类型和像素的位宽。当前支持如下模式:

1:1位像素,表示黑和白,但是存储的时候每个像素存储为8bit。

L:8位像素,表示黑和白。

P:8位像素,使用调色板映射到其他模式。

RGB:3x8位像素,为真彩色。

RGBA:4x8位像素,有透明通道的真彩色。

CMYK:4x8位像素,颜色分离。

YCbCr:3x8位像素,彩色视频格式。

I:32位整型像素。

F:32位浮点型像素。

PIL也支持一些特殊的模式,包括RGBX(有padding的真彩色)和RGBa(有自左乘alpha的真彩色)。

可以通过mode属性读取图像的模式。其返回值是包括上述模式的字符串。

属性mode的使用如下:

>>> from PIL importImage

>>> im =Image.open('D:\\Code\\Python\\test\\img\\1.jpg')

>>> im.mode

'RGB'

>>> md = im.mode

>>> print md

RGB

3、  尺寸

通过size属性可以获取图片的尺寸。这是一个二元组,包含水平和垂直方向上的像素数。

属性mode的使用如下:

>>> from PIL importImage

>>> im =Image.open('D:\\Code\\Python\\test\\img\\1.jpg')

>>>im.size

(800, 450)

>>>im_size = im.size

>>>print im_size[0]

800

>>>print im_size[1]

450

4、  坐标系统

PIL使用笛卡尔像素坐标系统,坐标(0,0)位于左上角。注意:坐标值表示像素的角;位于坐标(0,0)处的像素的中心实际上位于(0.5,0.5)。

坐标经常用于二元组(x,y)。长方形则表示为四元组,前面是左上角坐标。例如,一个覆盖800x600的像素图像的长方形表示为(0,0,800,600)。

5、  调色板

调色板模式 ("P")使用一个颜色调色板为每个像素定义具体的颜色值

6、  信息

使用info属性可以为一张图片添加一些辅助信息。这个是字典对象。加载和保存图像文件时,多少信息需要处理取决于文件格式。

属性info的使用如下:

>>>from PIL import Image

>>> im =Image.open('D:\\Code\\Python\\test\\img\\1.jpg')

>>>im.info

{'jfif_version':(1, 1), 'jfif': 257, 'jfif_unit': 1, 'jfif_density': (96, 96), 'dpi': (96, 96)}

>>>im_info = im.info

>>>im_info

{'jfif_version':(1, 1), 'jfif': 257, 'jfif_unit': 1, 'jfif_density': (96, 96), 'dpi': (96, 96)}

>>>print im_info['jfif_version']

(1, 1)

>>>print im_info['jfif']

257

7、  滤波器

对于将多个输入像素映射为一个输出像素的几何操作,PIL提供了4个不同的采样滤波器:

NEAREST:最近滤波。从输入图像中选取最近的像素作为输出像素。它忽略了所有其他的像素。

BILINEAR:双线性滤波。在输入图像的2x2矩阵上进行线性插值。注意:PIL的当前版本,做下采样时该滤波器使用了固定输入模板。

BICUBIC:双立方滤波。在输入图像的4x4矩阵上进行立方插值。注意:PIL的当前版本,做下采样时该滤波器使用了固定输入模板。

ANTIALIAS:平滑滤波。这是PIL 1.1.3版本中新的滤波器。对所有可以影响输出像素的输入像素进行高质量的重采样滤波,以计算输出像素值。在当前的PIL版本中,这个滤波器只用于改变尺寸和缩略图方法。

注意:在当前的PIL版本中,ANTIALIAS滤波器是下采样(例如,将一个大的图像转换为小图)时唯一正确的滤波器。BILIEAR和BICUBIC滤波器使用固定的输入模板,用于固定比例的几何变换和上采样是最好的。

Image模块中的方法resize()和thumbnail()用到了滤波器。

方法resize()的使用如下:

方法resize()的定义为:resize(size, filter=None)=> image

>>>from PIL import Image

>>> im= Image.open('D:\\Code\\Python\\test\\img\\1.jpg')

>>>im.size

(800, 450)

>>>im_resize = im.resize((256,256))

>>> im_resize.size

(256, 256)

对参数filter不赋值的话,方法resize()默认使用NEAREST滤波器。如果要使用其他滤波器可以通过下面的方法来实现:

>>>im_resize0 = im.resize((256,256), Image.BILINEAR)

>>>im_resize0.size

(256, 256)

>>>im_resize1 = im.resize((256,256), Image.BICUBIC)

>>>im_resize1.size

(256, 256)

>>>im_resize2 = im.resize((256,256), Image.ANTIALIAS)

>>>im_resize2.size

(256, 256)

方法thumbnail ()的使用如下:

方法thumbnail ()的定义为:im.thumbnail(size, filter=None)

>>>from PIL import Image

>>> im= Image.open('D:\\Code\\Python\\test\\img\\1.jpg')

>>>im.size

(800, 450)

>>>im.thumbnail((200,200))

>>>im.size

(200,112)

这里需要说明的是,方法thumbnail()需要保持宽高比,对于size=(200,200)的输入参数,其最终的缩略图尺寸为(200, 112)。

对参数filter不赋值的话,方法thumbnail()默认使用NEAREST滤波器。如果要使用其他滤波器可以通过下面的方法来实现:

>>> im= Image.open('D:\\Code\\Python\\test\\img\\1.jpg')

>>>im.size

(800, 450)

>>> im.thumbnail((200,200),Image.BILINEAR)

>>> im.size

(200, 112)

>>> im= Image.open('D:\\Code\\Python\\test\\img\\1.jpg')

>>>im.size

(800, 450)

>>> im.thumbnail((200,200), Image.BICUBIC)

>>> im.size

(200, 112)

>>> im= Image.open('D:\\Code\\Python\\test\\img\\1.jpg')

>>>im.size

(800, 450)

>>> im.thumbnail((200,200), Image.ANTIALIAS)

>>> im.size

(200, 112)

IMAGE模块0x1

Image模块是PIL中最重要的模块,它有一个类叫做image,与模块名称相同。Image类有很多函数、方法及属性,接下来将依次对image类的属性、函数和方法进行介绍。

一、Image类的属性

1、  Format

定义:im.format ⇒ string or None

含义:源文件的文件格式。如果是由PIL创建的图像,则其文件格式为None。

例子:

>>>from PIL import Image

>>> im= Image.open("D:\\Code\\Python\\test\\img\\test.jpg")

>>>im.format

'JPEG'

注:test.jpg是JPEG图像,所以其文件格式为JPEG。

>>> im= Image.open("D:\\Code\\Python\\test\\img\\test.gif")

>>>im.format

'GIF'

注:test.gif为GIF文件,所以其文件格式为GIF。

2、  Mode

定义:im.mode ⇒ string

含义:图像的模式。这个字符串表明图像所使用像素格式。该属性典型的取值为“1”,“L”,“RGB”或“CMYK”。对于图像模式的介绍,可以参考我的blog“Python图像处理库PIL的基本概念介绍”。

例子:

>>>from PIL import Image

>>> im = Image.open("D:\\Code\\Python\\test\\img\\test.jpg")

>>> im.mode

'RGB'

>>> im = Image.open("D:\\Code\\Python\\test\\img\\test.gif")

>>> im.mode

'P'

3、  Size

定义:im.size ⇒ (width, height)

含义:图像的尺寸,按照像素数计算。它的返回值为宽度和高度的二元组(width, height)。

例子:

>>>from PIL import Image

>>> im= Image.open("D:\\Code\\Python\\test\\img\\test.jpg")

>>>im.size

(800, 450)

>>> im= Image.open("D:\\Code\\Python\\test\\img\\test.gif")

>>> im.size

(400, 220)

4、  Palette

定义:im.palette ⇒ palette or None

含义:颜色调色板表格。如果图像的模式是“P”,则返回ImagePalette类的实例;否则,将为None。

例子:

>>> from PIL import Image

>>> im= Image.open("D:\\Code\\Python\\test\\img\\test.jpg")

>>> im.mode

'RGB'

>>>im.palette

>>> im= Image.open("D:\\Code\\Python\\test\\img\\test.gif")

>>> im.mode

'P'

>>>im.palette

<PIL.ImagePalette.ImagePaletteobject at 0x035E7AD0>

>>> pl= im.palette

Pl为ImagePalette类的实例。

5、  Info

定义:im.info ⇒ dictionary

含义:存储图像相关数据的字典。文件句柄使用该字典传递从文件中读取的各种非图像信息。大多数方法在返回新的图像时都会忽略这个字典;因为字典中的键并非标准化的,对于一个方法,它不能知道自己的操作如何影响这个字典。如果用户需要这些信息,需要在方法open()返回时保存这个字典。

例子:

>>>from PIL import Image

>>> im= Image.open("D:\\Code\\Python\\test\\img\\test.jpg")

>>>im.info

{'jfif_version':(1, 1), 'jfif': 257, 'jfif_unit': 1, 'jfif_density': (96, 96), 'dpi': (96, 96)}

>>> im= Image.open("D:\\Code\\Python\\test\\img\\test.gif")

>>>im.info

{'duration':100, 'version': 'GIF89a', 'extension': ('NETSCAPE2.0', 795L), 'background': 0,'loop': 0}

IMAGE模块0x1

二、Image类的函数

1、  New

定义:Image.new(mode,size) ⇒ image

Image.new(mode, size, color) ⇒ image

含义:使用给定的变量mode和size生成新的图像。Size是给定的宽/高二元组,这是按照像素数来计算的。对于单通道图像,变量color只给定一个值;对于多通道图像,变量color给定一个元组(每个通道对应一个值)。在版本1.1.4及其之后,用户也可以用颜色的名称,比如给变量color赋值为“red”。如果没有对变量color赋值,图像内容将会被全部赋值为0(图像即为黑色)。如果变量color是空,图像将不会被初始化,即图像的内容全为0。这对向该图像复制或绘制某些内容是有用的。

例子:

>>>from PIL import Image

>>> im= Image.new("RGB", (128, 128), "#FF0000")

>>>im.show()

图像im为128x128大小的红色图像。

>>> im= Image.new("RGB", (128, 128))

>>>im.show()

图像im为128x128大小的黑色图像,因为变量color不赋值的话,图像内容被设置为0,即黑色。

>>> im= Image.new("RGB", (128, 128), "red")

>>>im.show

图像im为128x128大小的红色图像。

2、  Open

定义:Image.open(file) ⇒ image

Image.open(file, mode) ⇒ image

含义:打开并确认给定的图像文件。这个是一个懒操作;该函数只会读文件头,而真实的图像数据直到试图处理该数据才会从文件读取(调用load()方法将强行加载图像数据)。如果变量mode被设置,那必须是“r”。

用户可以使用一个字符串(表示文件名称的字符串)或者文件对象作为变量file的值。文件对象必须实现read(),seek()和tell()方法,并且以二进制模式打开。

例子:

>>> from PIL import Image

>>> im= Image.open("D:\\Code\\Python\\test\\img\\test.jpg")

>>>im.show()

>>> im= Image.open("D:\\Code\\Python\\test\\img\\test.jpg", "r")

>>>im.show()

3、  Blend

定义:Image.blend(image1,image2, alpha) ⇒ image

含义:使用给定的两张图像及透明度变量alpha,插值出一张新的图像。这两张图像必须有一样的尺寸和模式。

合成公式为:out = image1 *(1.0 - alpha) + image2 * alpha

如果变量alpha为0.0,将返回第一张图像的拷贝。如果变量alpha为1.0,将返回第二张图像的拷贝。对变量alpha的值没有限制。

例子:

>>>from PIL import Image

>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>> im02 =Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")

>>> im =Image.blend(im01, im02, 0.3)

>>> im.show()

Test01.jpg和test02.jpg两张图像size都为1024x768,mode为“RGB”。它们按照第一张70%的透明度,第二张30%的透明度,合成为一张。

4、  Composite

定义:Image.composite(image1,image2, mask) ⇒ image

含义:使用给定的两张图像及mask图像作为透明度,插值出一张新的图像。变量mask图像的模式可以为“1”,“L”或者“RGBA”。所有图像必须有相同的尺寸。

例子:

>>>from PIL import Image

>>> im01 =Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>> im02 =Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")

>>>r,g,b = im01.split()

>>> g.mode

'L'

>>> g.size

(1024, 768)

>>> im= Image.composite(im01, im02, g)

>>>im.show()

5、  Eval

定义:Image.eval(image,function) ⇒ image

含义:使用变量function对应的函数(该函数应该有一个参数)处理变量image所代表图像中的每一个像素点。如果变量image所代表图像有多个通道,那变量function对应的函数作用于每一个通道。注意:变量function对每个像素只处理一次,所以不能使用随机组件和其他生成器。

例子:

>>>from PIL import Image

>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>> deffun(x):

return x * 0.5

>>>im_eval = Image.eval(im01, fun)

>>>im_eval.show()

>>>im01.show()

图像im01如下图:

图像im_eval如下图:

图像im_eval与im01比较,其像素值均为im01的一半,则其亮度自然也会比im01暗一些。

6、  Frombuffer

定义:Image.frombuffer(mode,size, data) ⇒ image

Image.frombuffer(mode, size,data, decoder, parameters) ⇒ image

含义:(New in PIL 1.1.4)使用标准的“raw”解码器,从字符串或者buffer对象中的像素数据产生一个图像存储。对于一些模式,这个图像存储与原始的buffer(这意味着对原始buffer对象的改变体现在图像本身)共享内存。并非所有的模式都可以共享内存;支持的模式有“L”,“RGBX”,“RGBA”和“CMYK”。对于其他模式,这个函数与fromstring()函数一致。

注意:版本1.1.6及其以下,这个函数的默认情况与函数fromstring()不同。这有可能在将来的版本中改变,所以为了最大的可移植性,当使用“raw”解码器时,推荐用户写出所有的参数,如下所示:

im =Image.frombuffer(mode, size, data, "raw", mode, 0, 1)

函数Image.frombuffer(mode,size, data, decoder, parameters)与函数fromstring()的调用一致。

例子:

7、  Fromstring

定义:Image.fromstring(mode,size, data) ⇒ image

Image.fromstring(mode, size,data, decoder, parameters) ⇒ image

含义:函数Image.fromstring(mode,size, data),使用标准的“raw”解码器,从字符串中的像素数据产生一个图像存储。

函数Image.fromstring(mode,size, data, decoder, parameters)也一样,但是允许用户使用PIL支持的任何像素解码器。更多信息可以参考:Writing YourOwn File Decoder.

注意:这个函数只对像素数据进行解码,而不是整个图像。如果用户的字符串包含整个图像,可以将该字符串包裹在StringIO对象中,使用函数open()来加载。

例子:

8、  Merge

定义:Image.merge(mode,bands) ⇒ image

含义:使用一些单通道图像,创建一个新的图像。变量bands为一个图像的元组或者列表,每个通道的模式由变量mode描述。所有通道必须有相同的尺寸。

变量mode与变量bands的关系:

len(ImageMode.getmode(mode).bands)= len(bands)

例子:

>>>from PIL import Image

>>>im01 = Image.open("D:\\Code\\Python\\test\\img\\test01.jpg")

>>>im02 = Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")

>>>r1,g1,b1 = im01.split()

>>>r2,g2,b2 = im02.split()

>>>r1.mode

'L'

>>>r1.size

(1024, 768)

>>>g1.mode

'L'

>>>g1.size

(1024, 768)

>>>r2.mode

'L'

>>>g2.size

(1024, 768)

>>>imgs=[r1,g2,b2]

>>>len(ImageMode.getmode("RGB").bands)

3

>>>len(imgs)

3

>>>im_merge = Image.merge("RGB", imgs)

>>>im_merge.show()

图像im_merge如下所示:

IMAGE模块0x1

转载于:https://www.cnblogs.com/liuyimin/p/7637336.html

相关文章:

c语言万年历的设计报告,万年历设计报告

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include#includechar* month_str[]{"January","February","March","April","May","June","July","August","September","Octob…

SQL Server的数据库开发工具

偶然的机会看到这个工具&#xff0c;看来比Oracle的PL/SQL Dev 有过之而无不及呀。而且是免费的哟这个工具看起来确实很牛呀&#xff0c;只是我还没有试用过。SQL Prompt 为Microsoft SQL Server 编辑器提供一种智能感知形式的自动完成功能&#xff0c;当你正在写你自己的SQL命…

国内首个深度学习工程师认证标准发布

10月10日&#xff0c;深度学习工程师认证发布会暨人工智能人才发展论坛在京召开。会上&#xff0c;基于中国软件行业协会发布的国内AI领域第一个专业技术人才培养标准——《深度学习工程师能力评估标准》&#xff08;以下称《标准》&#xff09;&#xff0c;深度学习技术及应用…

对于未来的多种可能,这几位中国科学家想说

注&#xff1a;本文来自“ 2018 AI开发者大会”媒体合作伙伴深科技十年前&#xff0c;人工智能还被叫做模式识别&#xff0c;中本聪也才刚刚提出区块链概念。现如今&#xff0c;人类发现了石墨烯的新制法&#xff0c;利用 CRISPR-Cas9 战胜了过去不可治愈的病症&#xff0c;甚至…

android 虚方法,尝试在空对象引用上调用虚方法’android.view.View android.view.View.getRootView()’...

我收到这个错误,“Attempt to invoke virtual method ‘android.view.Viewandroid.view.View.getRootView()’ on a null object reference”这是我的代码.black.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View v) {View bView findViewBy…

一个男人和一个女人的故事

一个男人和一个女人的故事,开始还有点意思,后来就有想打人的冲动.his_and_her_circumstance, 彼男彼女的事情. 还是一个男人和一个女人的故事简单. 曾经看到过介绍, 夸得天花乱缀. 我就下了,又花了一个星期的耐心终于看完了. 开始看,以为又是搞笑的青春校园故事. 后来越看越没…

Filezilla 二进制上传设定

大部份人都用這套吧&#xff0c;免費而且還不斷更新中。由於有些php源碼是有zend壓縮&#xff0c;沒用二進制傳送&#xff0c;會有問題&#xff0c;所以上傳模式最好是直接設定為二進制&#xff0c;如下圖&#xff1a;另外我建議最好也設定一次只傳一個檔&#xff0c;雖然慢了些…

android wear无法启用,android-wear – 无法创建Android虚拟设备,“没有为此目标安装系统映像”...

为了创建一个Android穿戴式模拟器&#xff0c;你需要按照下面的说明&#xff0c;1.如果您的Android SDK工具版本低于22.6&#xff0c;您必须更新2.在Android 4.4.2下&#xff0c;选择Android Wear ARM EABI v7a系统映像并安装它。3.Brolow Extras&#xff0c;确保您拥有最新版本…

全球物联网产业规模不断扩大 中国市场前景分析

近年来&#xff0c;物联网在行业领域的应用逐步深化。车辆远程信息服务管理、车联网、智能电网是近年来发展较快的应用领域&#xff0c;该等领域是物联网中率先形成完整产业链和内在驱动力的应用。拥有成熟产业链的车联网行业将率先发力&#xff0c;引领物联网行业的发展方向。…

月薪30k~50k,这个领域的人才正在被疯抢!

参加 2018 AI开发者大会&#xff0c;请扫描海报二维码 2016 年 IT 业年平均工资破 12 万元&#xff0c;首次超过金融业&#xff0c;排名各行业门类首位。2017 年&#xff0c;IT 业再次高居榜首&#xff0c;并一举超过 13 万元。挣得多花的少的程序员已经成为相亲市场上的香饽饽…

ADO.NET并发性

ADO.NET已经得到了广泛的应用&#xff0c;对于初学者搞懂基本的概念很重要&#xff0c;不如就写点基础的吧。首先介绍一下什么叫“并发”&#xff1a;我们在使用多用户数据库时常常会碰到数据更新失败、删除失等情况&#xff0c;如果有多个用户且同时访问一个数据库则当他们的事…

[JAVA] java仿windows 字体设置选项卡

想用java做一个像windows里一样的txt编辑软件&#xff0c;涉及到字体设置选项卡&#xff0c;在网上找了很久都没找到&#xff0c;就生气啦自己写一个&#xff0c;现在贴这里分享一下&#xff0c;下次再遇到这样的问题就不用自己亲自打代码啦&#xff01; 1 package 实验;2 3 im…

android小球移动代码,Android自定义圆形View实现小球跟随手指移动效果

本文实例为大家分享了Android实现小球跟随手指移动效果的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下一. 需求功能手指在屏幕上滑动&#xff0c;红色的小球始终跟随手指移动。实现的思路&#xff1a;1)自定义View&#xff0c;在onDraw中画圆作为小球&#xff1b;2…

从试用到使用:计算机视觉产业新一轮发展的起步年

参加 2018 AI开发者大会&#xff0c;请点击官网报名 CSDN 出品的《2018-2019 中国人工智能产业路线图》V2.0 版即将重磅面世&#xff01; V1.0 版发布以来&#xff0c;我们有幸得到了诸多读者朋友及行业专家的鼎力支持&#xff0c;在此表示由衷感谢。此次 V2.0 版路线图将进行新…

被人恨,但感觉不错!

做销售四年多了&#xff0c;从来没有碰到目前遇到的情况&#xff0c;心中的郁闷&#xff0c;真的没办法排除&#xff0c;干脆写到BLOG上&#xff0c;也算发泄&#xff0c;也算记录&#xff01;早两三年&#xff0c;一直在软件和IT服务行业打混&#xff0c;接触的多是企业老总&a…

android联动动画,利用 CollapsingToolbarLayout 完成联动的动画效果

最近项目中需要实现个动画效果,研究了下这里做下简单的分享.效果图如下:示例.gif最初的想法是自己去利用 Android 的嵌套滚动机制,去实现上面的嵌套滚动效果.但最后为了开发效率直接利用了 CollapsingToolbarLayout 和 CoordinatorLayout 的效果.实现效果的原理十分简单,监听 C…

波士顿动力机器人逆天,人类已无法阻挡它的三级跳!

一直刷新大众认知的波士顿动力又秀出了新花样。 如今&#xff0c;波士顿动力的 Atlas 人形机器人可以玩跑酷了&#xff01;在该公司发布的一段最新视频中&#xff0c;Atlas 展示了它可以单脚越过障碍物、跳到交错的箱子上&#xff0c;毫不费力&#xff01; 该公司表示&#xff…

自制程序清除系统垃圾文件

电脑用久了&#xff0c;系统分区内肯定会有很多垃圾文件&#xff0c;占据着大量空间&#xff0c;严重影响系统运行速度&#xff0c;这个程序能自动清理电脑里的垃圾而不会破坏系统。1. 在桌面上点鼠标右键&#xff0c;新建一个文本文件&#xff0c;把下面的字复制进去&#xff…

pylons中常用的paster命令

paster create -t pylons helloworld 创建一个以pylons为模板的项目&#xff0c;项目名字是helloworldpaster create --list-templates 显示当前的pylons中有多少可以使用的模板 paster serve --reaload development.ini 最常用的命令了&#xff0c;启动调式程序的时候都…

What-If 工具:无需写代码,即可测试机器学习模型

文 / Google AI 软件工程师 James Wexler 构建有效的机器学习 (ML) 系统需要提出许多问题。仅仅训练一个模型&#xff0c;然后放任不管&#xff0c;是远远不够的。而优秀的开发者就像侦探一样&#xff0c;总是不断探索&#xff0c;试图更好地理解自己的模型&#xff1a;数据点的…

linux如何安装neo4j,Ubuntu16.04 如何安装neo4j数据库

什么是neo4j数据库&#xff1f;neo4j数据库是图数据库的一种&#xff0c;属于nosql的一种&#xff0c;常见的nosql数据库还有redis、memcached、mongDB等&#xff0c;不同于传统的关系型数据库&#xff0c;nosql数据也有其独特之处&#xff0c;例如图数据库&#xff0c;在处理对…

MSI文件制作全过程

MSI文件制作全过程 这两天学习制作MSI文件用于组策略发布&#xff0c;试了一些做.MSI文件的软件包括Win2000Server光盘带的WinINSTALL LE&#xff0c;实际做出来的效果都不好。最后找到InstallShield AdminStudio5&#xff0c;用它做的MSI文件在组策略中成功发布。下面就以“石…

C语言 带比较器的归并排序

1 #include <stdio.h>2 #include <stdlib.h>3 4 typedef int DataType;5 6 //比较器7 int mycmp(const void * a, const void *b); 8 9 //int (*compar)(const void *, const void *) 函数指针 10 void Sort(DataType * arr, int from, int to, int (*compar)(cons…

iphone adb android,通过ADB获取Android手机信息

1、获取手机体系信息(CPU&#xff0c;厂商名称等)adbshell”cat/system/build.prop|grep”product””2、获取手机体系版别adbshellgetpropro.build.version.release3、获取手机体系api版别adbshellgetpropro.build.version.sdk4、获取手机设备类型adb-dshellgetpropro.product…

浩方平台CS流量评估

因为需要做了一次这样的简单的流量评估,就顺便拿出来给大家共享一下转载于:https://blog.51cto.com/niujh/10164

深度学习深陷可解释性泥淖,而这个研究领域正逐步焕发生机

只讲技术&#xff0c;拒绝空谈&#xff01;2018 AI开发者大会精彩议程曝光》 福利 11月2日前购票&#xff0c;立享7折优惠&#xff01;更有学生专享福利&#xff01;扫码报名↓↓↓

php redis 安装和使用

为什么80%的码农都做不了架构师&#xff1f;>>> mac安装 redis $brew update $brew install redis > Downloading https://homebrew.bintray.com/bottles/redis-4. Already downloaded: /Users/lph/Library/Caches/Homebrew/redis-4.0.2.sierra.bottle.tar.gz &…

怎样在javascript函数中将变量传递给服务端脚本程序?

怎样在javascript函数中将变量传递给服务端脚本程序?(有朋友问上述问题, 愿把结论分享给大家).摘 要: 服务器端脚本运行时, 它只会解释执行<% %>或<?php ?%> 之间的脚本语句, 它会把客户端脚本视作 普通文本. 而客户端脚本运行时, 服务器端脚本又是不可见的(客…

android studio val,Kotlin学习笔记之const val与val

const的使用const 必须修饰valconst 只允许在top-level级别和object中声明&#xff0c;使用方式如下&#xff1a;const val THOUSAND 1000object myObject {const val constNameObject: String "constNameObject"}class MyClass {companion object Factory {const …

算法开发人员的安身之本:如何将机器学习与各行各业进行深度结合

只讲技术&#xff0c;拒绝空谈&#xff01;2018 AI开发者大会精彩议程曝光》 2018 AI开发者大会 2018 AI开发者大会是一场由中美人工智能技术高手联袂打造的AI技术与产业的年度盛会&#xff01;是一场以技术落地为导向的干货会议&#xff01;大会设置了10场技术专题论坛&#x…