3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python的窗口处理模块_python的图像处理模块

發(fā)布時間:2025/4/17 python 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python的窗口处理模块_python的图像处理模块 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

除了opencv專門用來進行圖像處理,可以進行像素級、特征級、語義級、應(yīng)用級的圖像處理外,python中還有其他庫用來進行簡單的圖像處理,比如圖像的讀入和保存、濾波、直方圖均衡等簡單的操作,下面對這些庫進行詳細的介紹。

目錄

一、PIL庫

一、安裝命令sudo apt-get install python-imaging

二、Image模塊

Image模塊是在Python PIL圖像處理中常見的模塊,對圖像進行基礎(chǔ)操作的功能基本都包含于此模塊內(nèi)。如open、save、conver、show…等功能。

open類Image.open(file) ? image

Image.open(file, mode) ? image

要從文件加載圖像,使用 open() 函數(shù), 在 Image 模塊:@zhangziju

from PIL import Image ##調(diào)用庫

im = Image.open("E:\mywife.jpg") ##文件存在的路徑

im.show()

需要知道的是在win的環(huán)境下im.show的方式為win自帶的圖像顯示應(yīng)用。打開并確認給定的圖像文件。這個是一個懶操作;該函數(shù)只會讀文件頭,而真實的圖像數(shù)據(jù)直到試圖處理該數(shù)據(jù)才會從文件讀取(調(diào)用load()方法將強行加載圖像數(shù)據(jù))。如果變量mode被設(shè)置,那必須是“r”。用戶可以使用一個字符串(表示文件名稱的字符串)或者文件對象作為變量file的值。文件對象必須實現(xiàn)read(),seek()和tell()方法,并且以二進制模式打開。

Save類im.save(outfile,options…)

im.save(outfile, format, options…)

若要保存文件,則使用 Image 類的 save() 方法,此時保存文件的文件名就變得十分重要了,除非指定格式,否則這個庫將會以文件名的擴展名作為格式保存。使用給定的文件名保存圖像。如果變量format缺省,如果可能的話,則從文件名稱的擴展名判斷文件的格式。該方法返回為空。關(guān)鍵字options為文件編寫器提供一些額外的指令。如果編寫器不能識別某個選項,它將忽略它。用戶可以使用文件對象代替文件名稱。在這種情況下,用戶必須指定文件格式。文件對象必須實現(xiàn)了seek()、tell()和write()方法,且其以二進制模式打開。如果方法save()因為某些原因失敗,這個方法將產(chǎn)生一個異常(通常為IOError異常)。如果發(fā)生了異常,該方法也有可能已經(jīng)創(chuàng)建了文件,并向文件寫入了一些數(shù)據(jù)。如果需要的話,用戶的應(yīng)用程序可以刪除這個不完整的文件。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

print(im)

im.save("E:\mywife.png") ## 將"E:\mywife.jpg"保存為"E:\mywife.png"

im = Image.open("E:\mywife.png") ##打開新的png圖片

print(im.format, im.size, im.mode)

如下圖,在指定路徑下可看到新保存的png格式的圖片。

三、format類im.format ? string or None

這個屬性標識了圖像來源,如果圖像不是從文件讀取它的值就是None。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

print(im.format) ## 打印出格式信息

im.show()

如下圖可以看到其format為”JPEG”。

四、Mode類im.mode ? string

圖像的模式,常見的mode 有 “L” (luminance) 表示灰度圖像,“RGB”表示真彩色圖像,和 “CMYK” 表示出版圖像,表明圖像所使用像素格式。如面為常見的nodes描述:modes ?? ?????? 描述

1 ?? ?????????????? 1位像素,黑和白,存成8位的像素

L ?? ?????????????? 8位像素,黑白

P ?? ?????????????? 8位像素,使用調(diào)色板映射到任何其他模式

RGB ?? ? ? ? ??? 3× 8位像素,真彩

RGBA ?? ?????? 4×8位像素,真彩+透明通道

CMYK ?? ?????? 4×8位像素,顏色隔離

YCbCr ?? ?????? 3×8位像素,彩色視頻格式

I ?? ???????????????? 32位整型像素

F ?? ??????????????? 32位浮點型像素@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

print(im.mode) ## 打印出模式信息

im.show()

如下圖為圖片的mode為“RGB”模式。

五、convert類im.convert(mode)? image

將當前圖像轉(zhuǎn)換為其他模式,并且返回新的圖像。當從一個調(diào)色板圖像轉(zhuǎn)換時,這個方法通過這個調(diào)色板來轉(zhuǎn)換像素。如果不對變量mode賦值,該方法將會選擇一種模式,在沒有調(diào)色板的情況下,使得圖像和調(diào)色板中的所有信息都可以被表示出來。當從一個顏色圖像轉(zhuǎn)換為黑白圖像時,PIL庫使用ITU-R601-2 luma轉(zhuǎn)換公式:L = R * 299/1000 + G * 587/1000 + B * 114/1000

當轉(zhuǎn)換為2位圖像(模式“1”)時,源圖像首先被轉(zhuǎn)換為黑白圖像。結(jié)果數(shù)據(jù)中大于127的值被設(shè)置為白色,其他的設(shè)置為黑色;這樣圖像會出現(xiàn)抖動。如果要使用其他閾值,更改閾值127,可以使用方法point()。為了去掉圖像抖動現(xiàn)象,可以使用dither選項。from PIL import Image

im = Image.open("E:\mywife.jpg")

new_im = im.convert('P')

print(new_im.mode)

new_im.show()

如下,將圖像轉(zhuǎn)換為“P”模式。

對比原始圖像。

這里寫圖片描述im.convert(“P”,**options) ? image

這個與第一個方法定義一樣,但是當“RGB”圖像轉(zhuǎn)換為8位調(diào)色板圖像時能更好的處理。可供選擇的選項為:

Dither=. 控制顏色抖動。默認是FLOYDSTEINBERG,與鄰近的像素一起承擔錯誤。不使能該功能,則賦值為NONE。

Palette=. 控制調(diào)色板的產(chǎn)生。默認是WEB,這是標準的216色的“web palette”。要使用優(yōu)化的調(diào)色板,則賦值為ADAPTIVE。

Colors=. 當選項palette為ADAPTIVE時,控制用于調(diào)色板的顏色數(shù)目。默認是最大值,即256種顏色im.convert(mode,matrix) ? image

使用轉(zhuǎn)換矩陣將一個“RGB”圖像轉(zhuǎn)換為“L”或者“RGB”圖像。變量matrix為4或者16元組。from PIL import Image

im = Image.open("E:\mywife.jpg")

print(im.mode)

rgb2xyz = (0.412453,0.357580, 0.180423, 0,

0.212671,0.715160, 0.072169, 0,

0.019334,0.119193, 0.950227, 0 )

new_im = im.convert("L", rgb2xyz)

print(new_im.mode)

new_im.show()

轉(zhuǎn)換后效果

這里寫圖片描述

Size類

六、size類im.size ? (width, height)

圖像的尺寸,按照像素數(shù)計算,它的返回值為寬度和高度的二元組(width, height)。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

print(im.size) ## 打印出尺寸信息

im.show()

如下圖所示為圖片的尺寸信息,750*560。

七、Palette類im.palette ? palette or None

顏色調(diào)色板表格。如果圖像的模式是“P”,則返回ImagePalette類的實例;否則,將為None。

如下為對非“P”模式下的圖像進行palette信息顯示。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

print(im.palette)

易知,返回值為空,none

對圖像進行convert操作,轉(zhuǎn)換成“P”模式@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

new_im = im.convert('P')

print(new_im.mode)

print(new_im.palette)

則返回值為ImagePalette類的實例。如下:

八、Info類im.info ? dictionary

存儲圖像相關(guān)數(shù)據(jù)的字典。文件句柄使用該字典傳遞從文件中讀取的各種非圖像信息。大多數(shù)方法在返回新的圖像時都會忽略這個字典;因為字典中的鍵并非標準化的,對于一個方法,它不能知道自己的操作如何影響這個字典。如果用戶需要這些信息,需要在方法open()返回時保存這個字典。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

print(im.info)

九、new類Image.new(mode,size) ? image

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

使用給定的變量mode和size生成新的圖像。Size是給定的寬/高二元組,這是按照像素數(shù)來計算的。對于單通道圖像,變量color只給定一個值;對于多通道圖像,變量color給定一個元組(每個通道對應(yīng)一個值)。在版本1.1.4及其之后,用戶也可以用顏色的名稱,比如給變量color賦值為“red”。如果沒有對變量color賦值,圖像內(nèi)容將會被全部賦值為0(為黑色)。如果變量color是空,圖像將不會被初始化,即圖像的內(nèi)容全為0。這對向該圖像復制或繪制某些內(nèi)容是有用的。

如下為將圖像設(shè)置為128x128大小的紅色圖像。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

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

n_im.show()

顯示效果如下:

如下圖像為128x128大小的黑色圖像,因為變量color不賦值的話,圖像內(nèi)容被設(shè)置為0,即黑色。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

n_im= Image.new("RGB", (128, 128))

n_im.show()

黑圖像為128x128大小的綠色圖像。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

n_im= Image.new("RGB", (128, 128),"green")

n_im.show()

十、Copy 類im.copy() ? image

拷貝這個圖像。如果用戶想粘貼一些數(shù)據(jù)到這張圖,可以使用這個方法,但是原始圖像不會受到影響。from PIL import Image

im = Image.open("E:\mywife.jpg")

im_copy = im.copy()

圖像im_copy和im完全一樣。

十一、Crop類im.crop(box) ? image

從當前的圖像中返回一個矩形區(qū)域的拷貝。變量box是一個四元組,定義了左、上、右和下的像素坐標。用來表示在原始圖像中截取的位置坐標,如box(100,100,200,200)就表示在原始圖像中以左上角為坐標原點,截取一個100*100(像素為單位)的圖像,為方便理解,如下為示意圖box(b1,a1,b2,a2)。作圖軟件為Visio2016。這是一個懶操作。對源圖像的改變可能或者可能不體現(xiàn)在裁減下來的圖像中。為了獲取一個分離的拷貝,對裁剪的拷貝調(diào)用方法load()。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

box = (300, 100, 700, 700) ##確定拷貝區(qū)域大小

region = im.crop(box) ##將im表示的圖片對象拷貝到region中,大小為box

region.show()

如下圖為box截取的圖像區(qū)域顯示。

十二、Paste類im.paste(image,box)

將一張圖粘貼到另一張圖像上。變量box或者是一個給定左上角的2元組,或者是定義了左,上,右和下像素坐標的4元組,或者為空(與(0,0)一樣)。如果給定4元組,被粘貼的圖像的尺寸必須與區(qū)域尺寸一樣。如果模式不匹配,被粘貼的圖像將被轉(zhuǎn)換為當前圖像的模式。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

box=[0,0,100,100]

im_crop = im.crop(box)

print(im_crop.size,im_crop.mode)

im.paste(im_crop, (100,100)) ##(100,100,0,0)

im.paste(im_crop, (400,400,500,500))

im.show()

如下圖為paste操作:

十三、Filter類im.filter(filter) ? image

返回一個使用給定濾波器處理過的圖像的拷貝。具體參考圖像濾波在ImageFilter 模塊的應(yīng)用,在該模塊中,預(yù)先定義了很多增強濾波器,可以通過filter( )函數(shù)使用,預(yù)定義濾波器包括:BLUR、CONTOUR、DETAIL、EDGE_ENHANCE、EDGE_ENHANCE_MORE、EMBOSS、FIND_EDGES、SMOOTH、SMOOTH_MORE、SHARPEN。其中BLUR就是均值濾波,CONTOUR找輪廓,FIND_EDGES邊緣檢測,使用該模塊時,需先導入。@zhangziju

from PIL import Image

from PIL import ImageFilter ## 調(diào)取ImageFilter

imgF = Image.open("E:\mywife.jpg")

bluF = imgF.filter(ImageFilter.BLUR) ##均值濾波

conF = imgF.filter(ImageFilter.CONTOUR) ##找輪廓

edgeF = imgF.filter(ImageFilter.FIND_EDGES) ##邊緣檢測

imgF.show()

bluF.show()

conF.show()

edgeF.show()

濾波處理下的gakki~

十四、Blend類Image.blend(image1,image2, alpha) ? image

使用給定的兩張圖像及透明度變量alpha,插值出一張新的圖像。這兩張圖像必須有一樣的尺寸和模式。合成公式為:out = image1 (1.0 - alpha) + image2 alpha

若變量alpha為0.0,返回第一張圖像的拷貝。若變量alpha為1.0,將返回第二張圖像的拷貝。對變量alpha的值無限制。@zhangziju

from PIL import Image

im1 = Image.open("E:\mywife.jpg")

im2 = Image.open("E:\mywife2.jpg")

print(im1.mode,im1.size)

print(im2.mode,im2.size)

im = Image.blend(im1, im2, 0.2)

im.show()

需保證兩張圖像的模式和大小是一致的,如下為顯示im1和im2的具體信息。

im1和im2按照第一張80%的透明度,第二張20%的透明度,合成為一張。

十五、Splitim.split() ? sequence

返回當前圖像各個通道組成的一個元組。例如,分離一個“RGB”圖像將產(chǎn)生三個新的圖像,分別對應(yīng)原始圖像的每個通道(紅,綠,藍)。from PIL import Image

im = Image.open("E:\mywife.jpg")

r,g,b = im.split()

print(r.mode)

print(r.size)

print(im.size)

十六、Composite類Image.composite(image1,image2, mask) ? image

復合類使用給定的兩張圖像及mask圖像作為透明度,插值出一張新的圖像。變量mask圖像的模式可以為“1”,“L”或者“RGBA”。所有圖像必須有相同的尺寸。@zhangziju

from PIL import Image

im1 = Image.open("E:\mywife.jpg")

im2 = Image.open("E:\mywife2.jpg")

r,g,b = im1.split() ##分離出r,g,b

print(b.mode)

print(im1.mode,im1.size)

print(im2.mode,im2.size)

im = Image.composite(im1,im2,b)

im.show()

十七、Eval類Image.eval(image,function) ? image

使用變量function對應(yīng)的函數(shù)(該函數(shù)應(yīng)該有一個參數(shù))處理變量image所代表圖像中的每一個像素點。如果變量image所代表圖像有多個通道,那變量function對應(yīng)的函數(shù)作用于每一個通道。注意:變量function對每個像素只處理一次,所以不能使用隨機組件和其他生成器。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

def fun01(x):

return x*0.3

def fun02(y):

return y*2.0

im1_eval = Image.eval(im, fun01)

im2_eval = Image.eval(im, fun02)

im1_eval.show()

im2_eval.show()

在函數(shù)fun01和fun02下的圖像顯示。

十八、Merge類Image.merge(mode,bands) ? image

合并類使用一些單通道圖像,創(chuàng)建一個新的圖像。變量bands為一個圖像的元組或者列表,每個通道的模式由變量mode描述。所有通道必須有相同的尺寸。

變量mode與變量bands的關(guān)系:len(ImageMode.getmode(mode).bands)= len(bands)@zhangziju

from PIL import Image

im1 = Image.open("E:\mywife.jpg")

im2 = Image.open("E:\mywife2.jpg")

r1,g1,b1 = im1.split()

r2,g2,b2 = im2.split()

print(r1.mode,r1.size,g1.mode,g1.size)

print(r2.mode,r2.size,g2.mode,g2.size)

new_im=[r1,g2,b2]

print(len(new_im))

im_merge = Image.merge("RGB",new_im)

im_merge.show()

打印信息顯示

merge操作

十九、Draft類im.draft(mode,size)

配置圖像文件加載器,使得返回一個與給定的模式和尺寸盡可能匹配的圖像的版本。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

print(im.size,im.mode)

new_im = im.draft("L", (200,200))

print(new_im.size,new_im.mode)

new_im.show()

關(guān)鍵信息顯示

轉(zhuǎn)換效果

二十、Getbands類im.getbands()? tuple of strings

返回包括每個通道名稱的元組。例如,對于RGB圖像將返回(“R”,“G”,“B”)。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

print(im.getbands())

這里寫圖片描述

二十一、Getbbox類im.getbbox() ? 4-tuple or None

計算圖像非零區(qū)域的包圍盒。這個包圍盒是一個4元組,定義了左、上、右和下像素坐標。如果圖像是空的,這個方法將返回空。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

print(im.getbbox())

二十二、Getdata類im.getdata() ? sequence

以包含像素值的sequence對象形式返回圖像的內(nèi)容。這個sequence對象是扁平的,以便第一行的值直接跟在第零行的值后面,等等。這個方法返回的sequence對象是PIL內(nèi)部數(shù)據(jù)類型,它只支持某些sequence操作,包括迭代和基礎(chǔ)sequence訪問。使用list(im.getdata()),將它轉(zhuǎn)換為普通的sequence。Sequence對象的每一個元素對應(yīng)一個像素點的R、G和B三個值。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

sequ = im.getdata()

sequ0 = list(sequ)

print(sequ0[0])

print(sequ0[1])

print(sequ0[2])

可視化顯示sequence0里面的數(shù)據(jù)。

打印顯示結(jié)果,與前面對比。

二十三、Getextrema類im.getextrema() ? 2-tuple

返回一個2元組,包括該圖像中的最小和最大值。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

print(im.getextrema())

該方法返回了R/G/B三個通道的最小和最大值的2元組。

二十四、Getpixel類im.getpixel(xy) ? value or tuple

返回給定位置的像素值。如果圖像為多通道,則返回一個元組。該方法執(zhí)行比較慢;如果用戶需要使用python處理圖像中較大部分數(shù)據(jù),可以使用像素訪問對象(見load),或者方法getdata()。@zahngziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

print(im.getpixel((0,0)))

print(im.getpixel((4,0)))

r,g,b = im.split()

print(b.getpixel((11,8)))

二十五、Histogram類im.histogram()? list

返回一個圖像的直方圖。這個直方圖是關(guān)于像素數(shù)量的list,圖像中的每個象素值對應(yīng)一個成員。如果圖像有多個通道,所有通道的直方圖會連接起來(例如,“RGB”圖像的直方圖有768個值)。二值圖像(模式為“1”)當作灰度圖像(模式為“L”)處理。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

imhis = im.histogram()

print(len(imhis))

print(imhis[0])

print(imhis[150])

print(imhis[300])im.histogram(mask)? list

返回圖像中模板圖像非零地方的直方圖。模板圖像與處理圖像的尺寸必須相同,并且要么是二值圖像(模式為“1”),要么為灰度圖像(模式為“L”)。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

r,g,b = im.split()

imhis = im.histogram()

print(r.mode)

print(len(imhis))

print(imhis[0])

print(imhis[150])

print(imhis[300])

二十六、Load類im.load()

為圖像分配內(nèi)存并從文件中加載它(或者從源圖像,對于懶操作)。正常情況下,用戶不需要調(diào)用這個方法,因為在第一次訪問圖像時,Image類會自動地加載打開的圖像。在1.1.6及以后的版本,方法load()返回一個用于讀取和修改像素的像素訪問對象。這個訪問對象像一個二維隊列,如:pix = im.load()

print pix[x, y]

pix[x, y] =value

通過這個對象訪問比方法getpixel()和putpixel()快很多。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

pix = im.load()

print(pix[0,2])im.paste(colour,box)

使用同一種顏色填充變量box對應(yīng)的區(qū)域。對于單通道圖像,變量colour為單個顏色值;對于多通道,則為一個元組。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

im.paste((256,256,0),(0,0,100,100)) ##(256,256,0)表示黃色

im.show()@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

im.paste("blue",(0,0,100,100)) ##或者“blue”

im.show()im.paste(image,box, mask)

使用變量mask對應(yīng)的模板圖像來填充所對應(yīng)的區(qū)域??梢允褂媚J綖椤?”、“L”或者“RGBA”的圖像作為模板圖像。模板圖像的尺寸必須與變量image對應(yīng)的圖像尺寸一致。如果變量mask對應(yīng)圖像的值為255,則模板圖像的值直接被拷貝過來;如果變量mask對應(yīng)圖像的值為0,則保持當前圖像的原始值。變量mask對應(yīng)圖像的其他值,將對兩張圖像的值進行透明融合,如果變量image對應(yīng)的為“RGBA”圖像,即粘貼的圖像模式為“RGBA”,則alpha通道被忽略。用戶可以使用同樣的圖像作為原圖像和模板圖像。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

box=[300,300,400,400]

im_crop =im.crop(box)

r,g,b =im_crop.split()

im.paste(im_crop, (200,200,300,300), r)

im.show()

二十七、Putdata類im.putdata(data)

im.putdata(data, scale, offset)

從sequence對象中拷貝數(shù)據(jù)到當前圖像,從圖像的左上角(0,0)位置開始。變量scale和offset用來調(diào)整sequence中的值:pixel = value*scale + offset

如果變量scale忽略,則默認為1.0。如果變量offset忽略,則默認為0.0。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

r, g, b = im.split()

print(

r.getpixel((0, 0)),

r.getpixel((1, 0)),

r.getpixel((2, 0)),

r.getpixel((3, 0)),

r.putdata([1, 2, 3, 4]),

r.getpixel((0, 0)),

r.getpixel((1, 0)),

r.getpixel((2, 0)),

r.getpixel((3, 0)),

)

二十八、Resize類im.resize(size) ? image

im.resize(size, filter) ? image

返回改變尺寸的圖像的拷貝。變量size是所要求的尺寸,是一個二元組:(width, height)。變量filter為NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果忽略,或者圖像模式為“1”或者“P”,該變量設(shè)置為NEAREST。在當前的版本中bilinear和bicubic濾波器不能很好地適應(yīng)大比例的下采樣(例如生成縮略圖)。用戶需要使用ANTIALIAS,除非速度比質(zhì)量更重要。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

region = im.resize((400, 400)) ##重新設(shè)定大小

region.show()

很明顯由于大小的重新設(shè)定,圖片的顯示效果有所轉(zhuǎn)變,gakki依然美膩~

二十九、Rotate類im.rotate(angle) ? image

im.rotate(angle,filter=NEAREST, expand=0) ? image

返回一個按照給定角度順時鐘圍繞圖像中心旋轉(zhuǎn)后的圖像拷貝。變量filter是NEAREST、BILINEAR或者BICUBIC之一。如果省略該變量,或者圖像模式為“1”或者“P”,則默認為NEAREST。變量expand,如果為true,表示輸出圖像足夠大,可以裝載旋轉(zhuǎn)后的圖像。如果為false或者缺省,則輸出圖像與輸入圖像尺寸一樣大。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

im_45 = im.rotate(45)

im_30 = im.rotate(30, Image.NEAREST,1)

print(im_45.size,im_30.size)

im_45.show()

im_30.show()

三十、Seek類im.seek(frame)

在給定的文件序列中查找指定的幀。如果查找超越了序列的末尾,則產(chǎn)生一個EOFError異常。當文件序列被打開時,PIL庫自動指定到第0幀上。@zhangziju

from PIL import Image

im_gif = Image.open("E:\mywife.gif")

print(im_gif.mode)

im_gif.show() ##第0幀

im_gif.seek(3)

im_gif.show()

im_gif.seek(9)

im_gif.show()

來來來~這是gakki原圖欣賞下~

這里寫圖片描述

查找?guī)瑂eek()的效果如下:

三十一、Tell類im.tell() ? integer

返回當前幀所處位置,從0開始計算。@zhangziju

from PIL import Image

im_gif = Image.open("E:\mywife.gif")

print(im_gif.tell())

im_gif.seek(8)

print(im_gif.tell())

三十二、Thumbnail類im.thumbnail(size)

im.thumbnail(size, filter)

修改當前圖像,使其包含一個自身的縮略圖,該縮略圖尺寸不大于給定的尺寸。這個方法會計算一個合適的縮略圖尺寸,使其符合當前圖像的寬高比,調(diào)用方法draft()配置文件讀取器,最后改變圖像的尺寸。變量filter應(yīng)該是NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果省略該變量,則默認為NEAREST。注意:在當前PIL的版本中,濾波器bilinear和bicubic不能很好地適應(yīng)縮略圖產(chǎn)生。用戶應(yīng)該使用ANTIALIAS,圖像質(zhì)量最好。如果處理速度比圖像質(zhì)量更重要,可以選用其他濾波器。這個方法在原圖上進行修改。如果用戶不想修改原圖,可以使用方法copy()拷貝一個圖像。這個方法返回空。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

im.thumbnail((100,100))

三十三、Transform類im.transform(size,method, data) ? image

im.transform(size, method, data, filter) ? image

使用給定的尺寸生成一張新的圖像,與原圖有相同的模式,使用給定的轉(zhuǎn)換方式將原圖數(shù)據(jù)拷貝到新的圖像中。在當前的PIL版本中,參數(shù)method為EXTENT(裁剪出一個矩形區(qū)域),AFFINE(仿射變換),QUAD(將正方形轉(zhuǎn)換為矩形),MESH(一個操作映射多個正方形)或者PERSPECTIVE。變量filter定義了對原始圖像中像素的濾波器。在當前的版本中,變量filter為NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一。如果忽略,或者圖像模式為“1”或者“P”,該變量設(shè)置為NEAREST。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

print(im.size)

imtra = im.transform((200, 200), Image.EXTENT, (0, 0, 500, 500))

print(imtra.size)

imtra.show()im.transform(size,EXTENT, data) ? image

im.transform(size, EXTENT, data, filter) ? image

從圖像中裁剪一個區(qū)域。變量data為指定輸入圖像中兩個坐標點的4元組(x0,y0,x1,y1)。輸出圖像為這兩個坐標點之間像素的采樣結(jié)果。例如,如果輸入圖像的(x0,y0)為輸出圖像的(0,0)點,(x1,y1)則與變量size一樣。這個方法可以用于在當前圖像中裁剪,放大,縮小或者鏡像一個任意的長方形。它比方法crop()稍慢,但是與resize操作一樣快。im.transform(size, AFFINE, data) ? image

im.transform(size, AFFINE,data, filter) ? image

對當前的圖像進行仿射變換,變換結(jié)果體現(xiàn)在給定尺寸的新圖像中。變量data是一個6元組(a,b,c,d,e,f),包含一個仿射變換矩陣的第一個兩行。輸出圖像中的每一個像素(x,y),新值由輸入圖像的位置(ax+by+c, dx+ey+f)的像素產(chǎn)生,使用最接近的像素進行近似。這個方法用于原始圖像的縮放、轉(zhuǎn)換、旋轉(zhuǎn)和裁剪。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

print(im.size)

imtra = im.transform((200, 200), Image.AFFINE, (1,2,3,2,1,4))

print(imtra.size)

imtra.show()im.transform(size,QUAD, data) ? image

im.transform(size, QUAD, data, filter) ? image

輸入圖像的一個四邊形(通過四個角定義的區(qū)域)映射到給定尺寸的長方形。變量data是一個8元組(x0,y0,x1,y1,x2,y2,x3,y3),它包括源四邊形的左上,左下,右下和右上四個角。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

print(im.size)

imtra = im.transform((200, 200), Image.QUAD, (0,0,0,500,600,500,600,0))

print(imtra.size)

imtra.show()im.transform(size,PERSPECTIVE, data) ? image

im.transform(size, PERSPECTIVE, data, filter) ? image

對當前圖像進行透視變換,產(chǎn)生給定尺寸的新圖像。變量data是一個8元組(a,b,c,d,e,f,g,h),包括一個透視變換的系數(shù)。對于輸出圖像中的每個像素點,新的值來自于輸入圖像的位置的(a x + b y + c)/(g x + h y + 1), (d x+ e y + f)/(g x + h y + 1)像素,使用最接近的像素進行近似。這個方法用于原始圖像的2D透視。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

print(im.size)

imtra = im.transform((200, 200), Image.PERSPECTIVE, (1,2,3,2,1,6,1,2))

print(imtra.size)

imtra.show()

wocao!!!gakki不見了!!!

三十四、Transpose類im.transpose(method)? image

返回當前圖像的翻轉(zhuǎn)或者旋轉(zhuǎn)的拷貝。變量method的取值為:FLIP_LEFT_RIGHT,FLIP_TOP_BOTTOM,ROTATE_90,ROTATE_180,或ROTATE_270。@zhangziju

from PIL import Image

im = Image.open("E:\mywife.jpg")

im.rotate(45) #逆時針旋轉(zhuǎn) 45 度角。

im.transpose(Image.FLIP_LEFT_RIGHT) #左右對換。

im.transpose(Image.FLIP_TOP_BOTTOM) #上下對換。

im.transpose(Image.ROTATE_90) #旋轉(zhuǎn) 90 度角。

im.transpose(Image.ROTATE_180) #旋轉(zhuǎn) 180 度角。

im.transpose(Image.ROTATE_270) #旋轉(zhuǎn) 270 度角。

二、skimage庫

基于python腳本語言開發(fā)的數(shù)字圖片處理包,比如PIL,Pillow, opencv, scikit-image等。PIL和Pillow只提供最基礎(chǔ)的數(shù)字圖像處理,功能有限;opencv實際上是一個c++庫,只是提供了python接口,更新速度非常慢。scikit-image是基于scipy的一款圖像處理包,它將圖片作為numpy數(shù)組進行處理,正好與matlab一樣,因此,我們最終選擇scikit-image進行數(shù)字圖像處理。

Image讀出來的是PIL的類型,而skimage.io讀出來的數(shù)據(jù)是numpy格式的import Image as img

import os

from matplotlib import pyplot as plot

from skimage import io,transform

#Image和skimage讀圖片

img_file1 = img.open('./CXR_png/MCUCXR_0042_0.png')

img_file2 = io.imread('./CXR_png/MCUCXR_0042_0.png')

輸出可以看出Img讀圖片的大小是圖片的(width, height);而skimage的是(height,width, channel), [這也是為什么caffe在單獨測試時要要在代碼中設(shè)置:transformer.set_transpose('data',(2,0,1)),因為caffe可以處理的圖片的數(shù)據(jù)格式是(channel,height,width),所以要轉(zhuǎn)換數(shù)據(jù)]#讀圖片后數(shù)據(jù)的大小:

print "the picture's size: ", img_file1.size

print "the picture's shape: ", img_file2.shapethe picture's size: (4892, 4020)

the picture's shape: (4020, 4892)#得到像素:

print(img_file1.getpixel((500,1000)), img_file2[500][1000])

print(img_file1.getpixel((500,1000)), img_file2[1000][500])

print(img_file1.getpixel((1000,500)), img_file2[500][1000])(0, 139)

(0, 0)

(139, 139)

Img讀出來的圖片獲得某點像素用getpixel((w,h))可以直接返回這個點三個通道的像素值

skimage讀出來的圖片可以直接img_file2[0][0]獲得,但是一定記住它的格式,并不是你想的(channel,height,width)

一、圖片信息

如果我們想知道一些skimage圖片信息from skimage import io, data

img = data.chelsea()

io.imshow(img)

print(type(img)) #顯示類型

print(img.shape) #顯示尺寸

print(img.shape[0]) #圖片高度

print(img.shape[1]) #圖片寬度

print(img.shape[2]) #圖片通道數(shù)

print(img.size) #顯示總像素個數(shù)

print(img.max()) #最大像素值

print(img.min()) #最小像素值

print(img.mean()) #像素平均值

print(img[0][0])#圖像的像素值

PIL image 查看圖片信息,可用如下的方法print type(img)

print img.size #圖片的尺寸

print img.mode #圖片的模式

print img.format #圖片的格式

print(img.getpixel((0,0)))#得到像素:

#img讀出來的圖片獲得某點像素用getpixel((w,h))可以直接返回這個點三個通道的像素值# 獲取圖像的灰度值范圍

width = img.size[0]

height = img.size[1]

# 輸出圖片的像素值

count = 0

for i in range(0, width):

for j in range(0, height):

if img.getpixel((i, j))>=0 and img.getpixel((i, j))<=255:

count +=1

print count

print(height*width)

skimage提供了io模塊,顧名思義,這個模塊是用來圖片輸入輸出操作的。為了方便練習,也提供一個data模塊,里面嵌套了一些示例圖片,我們可以直接使用。

二、skimage包的子模塊

skimage包的全稱是scikit-image SciKit (toolkit for SciPy) ,它對scipy.ndimage進行了擴展,提供了更多的圖片處理功能。它是由python語言編寫的,由scipy 社區(qū)開發(fā)和維護。skimage包由許多的子模塊組成,各個子模塊提供不同的功能。主要子模塊列表如下:子模塊名稱  主要實現(xiàn)功能

io 讀取、保存和顯示圖片或視頻

data 提供一些測試圖片和樣本數(shù)據(jù)

color 顏色空間變換

filters 圖像增強、邊緣檢測、排序濾波器、自動閾值等

draw 操作于numpy數(shù)組上的基本圖形繪制,包括線條、矩形、圓和文本等

transform 幾何變換或其它變換,如旋轉(zhuǎn)、拉伸和拉東變換等

morphology 形態(tài)學操作,如開閉運算、骨架提取等

exposure 圖片強度調(diào)整,如亮度調(diào)整、直方圖均衡等

feature 特征檢測與提取等

measure 圖像屬性的測量,如相似性或等高線等

segmentation 圖像分割

restoration 圖像恢復

util 通用函數(shù)

從外部讀取圖片并顯示

讀取單張彩色rgb圖片,使用skimage.io.imread(fname)函數(shù),帶一個參數(shù),表示需要讀取的文件路徑。顯示圖片使用skimage.io.imshow(arr)函數(shù),帶一個參數(shù),表示需要顯示的arr數(shù)組(讀取的圖片以numpy數(shù)組形式計算)。from skimage import io

img=io.imread('d:/dog.jpg')

io.imshow(img)

讀取單張灰度圖片,使用skimage.io.imread(fname,as_grey=True)函數(shù),第一個參數(shù)為圖片路徑,第二個參數(shù)為as_grey, bool型值,默認為Falsefrom skimage import io

img=io.imread('d:/dog.jpg',as_grey=True)

io.imshow(img)

skimage程序自帶了一些示例圖片,如果我們不想從外部讀取圖片,就可以直接使用這些示例圖片:astronaut 航員圖片 coffee 一杯咖啡圖片

lena lena美女圖片 camera 拿相機的人圖片

coins 硬幣圖片 moon 月亮圖片

checkerboard 棋盤圖片 horse 馬圖片

page 書頁圖片 chelsea 小貓圖片

hubble_deep_field 星空圖片 text 文字圖片

clock 時鐘圖片 immunohistochemistry 結(jié)腸圖片

顯示這些圖片可用如下代碼,不帶任何參數(shù)from skimage import io, data

img=data.lena()

io.imshow(img)

圖片名對應(yīng)的就是函數(shù)名,如camera圖片對應(yīng)的函數(shù)名為camera(). 這些示例圖片存放在skimage的安裝目錄下面,路徑名稱為data_dir,我們可以將這個路徑打印出來看看from skimage import data_dir

print(data_dir)

保存圖片

使用io模塊的imsave(fname,arr)函數(shù)來實現(xiàn)。第一個參數(shù)表示保存的路徑和名稱,第二個參數(shù)表示需要保存的數(shù)組變量。from skimage import io,data

img=data.chelsea()

io.imshow(img)

io.imsave('d:/cat.jpg',img)

保存圖片的同時也起到了轉(zhuǎn)換格式的作用。如果讀取時圖片格式為jpg圖片,保存為png格式,則將圖片從jpg圖片轉(zhuǎn)換為png圖片并保存。

圖片信息

如果我們想知道一些圖片信息from skimage import io, data

img = data.chelsea()

io.imshow(img)

print(type(img)) #顯示類型

print(img.shape) #顯示尺寸

print(img.shape[0]) #圖片高度

print(img.shape[1]) #圖片寬度

print(img.shape[2]) #圖片通道數(shù)

print(img.size) #顯示總像素個數(shù)

print(img.max()) #最大像素值

print(img.min()) #最小像素值

print(img.mean()) #像素平均值

print(img[0][0])#圖像的像素值

三、圖像像素的訪問與裁剪

圖片讀入程序中后,是以numpy數(shù)組存在的。因此對numpy數(shù)組的一切功能,對圖片也適用。對數(shù)組元素的訪問,實際上就是對圖片像素點的訪問。

彩色圖片訪問方式為:img[i,j,c]

i表示圖片的行數(shù),j表示圖片的列數(shù),c表示圖片的通道數(shù)(RGB三通道分別對應(yīng)0,1,2)。坐標是從左上角開始。

灰度圖片訪問方式為:gray[i,j]

例1:輸出小貓圖片的G通道中的第20行30列的像素值from skimage import io,data

img=data.chelsea()

pixel=img[20,30,1]

print(pixel)

例2:顯示紅色單通道圖片from skimage import io,data

img=data.chelsea()

R=img[:,:,0]

io.imshow(R)

除了對像素進行讀取,也可以修改像素值。

例3:對小貓圖片隨機添加椒鹽噪聲from skimage import io,data

import numpy as np

img=data.chelsea()

#隨機生成5000個椒鹽

rows,cols,dims=img.shape

for i in range(5000):

x=np.random.randint(0,rows)

y=np.random.randint(0,cols)

img[x,y,:]=255

io.imshow(img)

這里用到了numpy包里的random來生成隨機數(shù),randint(0,cols)表示隨機生成一個整數(shù),范圍在0到cols之間。用img[x,y,:]=255這句來對像素值進行修改,將原來的三通道像素值,變?yōu)?55。通過對數(shù)組的裁剪,就可以實現(xiàn)對圖片的裁剪。

例4:對小貓圖片進行裁剪from skimage import io,data

img=data.chelsea()

roi=img[80:180,100:200,:]

io.imshow(roi)

對多個像素點進行操作,使用數(shù)組切片方式訪問。切片方式返回的是以指定間隔下標訪問 該數(shù)組的像素值。下面是有關(guān)灰度圖像的一些例子:img[i,:] = im[j,:] # 將第 j 行的數(shù)值賦值給第 i 行

img[:,i] = 100 # 將第 i 列的所有數(shù)值設(shè)為 100

img[:100,:50].sum() # 計算前 100 行、前 50 列所有數(shù)值的和

img[50:100,50:100] # 50~100 行,50~100 列(不包括第 100 行和第 100 列)

img[i].mean() # 第 i 行所有數(shù)值的平均值

img[:,-1] # 最后一列

img[-2,:] (or im[-2]) # 倒數(shù)第二行

最后我們再看兩個對像素值進行訪問和改變的例子:

例5:將lena圖片進行二值化,像素值大于128的變?yōu)?,否則變?yōu)?from skimage import io,data,color

img=data.lena()

img_gray=color.rgb2gray(img)

rows,cols=img_gray.shape

for i in range(rows):

for j in range(cols):

if (img_gray[i,j]<=0.5):

img_gray[i,j]=0

else:

img_gray[i,j]=1

io.imshow(img_gray)

使用了color模塊的rgb2gray()函數(shù),將彩色三通道圖片轉(zhuǎn)換成灰度圖。轉(zhuǎn)換結(jié)果為float64類型的數(shù)組,范圍為[0,1]之間。將彩色三通道圖片轉(zhuǎn)換成灰度圖,最后變成unit8, float轉(zhuǎn)換為unit8是有信息損失的。img_path = 'data/dpclassifier/newtrain/test/1_0.png'

import Image as img

import os

from matplotlib import pyplot as plot

from skimage import io,transform, img_as_ubyte

img_file1 = img.open(img_path)

img_file1.show()

img_file2 = io.imread(img_path)

io.imshow(img_file2)

print(type(img_file1),img_file1.mode, type(img_file2),img_file2.shape, img_file2.dtype,img_file2.max(),img_file2.min(),img_file2.mean())

img_file22=skimage.color.rgb2gray(img_file2)

print(type(img_file22),img_file22.shape,img_file22.dtype,img_file22.max(),img_file22.min(),img_file22.mean() )

dst=img_as_ubyte(img_file22)

print(type(dst),dst.shape,dst.dtype, dst.max(), dst.min(), dst.mean())

結(jié)果(, 'RGB', , (420, 512, 3), dtype('uint8'), 255, 0, 130.9983863467262)

(, (420, 512), dtype('float64'), 1.0, 0.0, 0.5137191621440242)

(, (420, 512), dtype('uint8'), 255, 0, 130.9983863467262)

例6:from skimage import io,data

img=data.chelsea()

reddish = img[:, :, 0] >170

img[reddish] = [0, 255, 0]

io.imshow(img)

這個例子先對R通道的所有像素值進行判斷,如果大于170,則將這個地方的像素值變?yōu)閇0,255,0], 即G通道值為255,R和B通道值為0。

四、圖像數(shù)據(jù)類型及顏色空間轉(zhuǎn)換

在skimage中,一張圖片就是一個簡單的numpy數(shù)組,數(shù)組的數(shù)據(jù)類型有很多種,相互之間也可以轉(zhuǎn)換。這些數(shù)據(jù)類型及取值范圍如下表所示:Data type Range

uint8 0 to 255

uint16 0 to 65535

uint32 0 to 232

float -1 to 1 or 0 to 1

int8 -128 to 127

int16 -32768 to 32767

int32 -231 to 231 - 1

一張圖片的像素值范圍是[0,255], 因此默認類型是unit8, 可用如下代碼查看數(shù)據(jù)類型from skimage import io,data

img=data.chelsea()

print(img.dtype.name)

在上面的表中,特別注意的是float類型,它的范圍是[-1,1]或[0,1]之間。一張彩色圖片轉(zhuǎn)換為灰度圖后,它的類型就由unit8變成了float

1、unit8轉(zhuǎn)floatfrom skimage import data,img_as_float

img=data.chelsea()

print(img.dtype.name)

dst=img_as_float(img)

print(dst.dtype.name)

2、float轉(zhuǎn)uint8from skimage import img_as_ubyte

import numpy as np

img = np.array([0, 0.5, 1], dtype=float)

print(img.dtype.name)

dst=img_as_ubyte(img)

print(dst.dtype.name)

float轉(zhuǎn)為unit8,有可能會造成數(shù)據(jù)的損失,因此會有警告提醒。除了這兩種最常用的轉(zhuǎn)換以外,其實有一些其它的類型轉(zhuǎn)換,如下表:Function name Description

img_as_float Convert to 64-bit floating point.

img_as_ubyte Convert to 8-bit uint.

img_as_uint Convert to 16-bit uint.

img_as_int Convert to 16-bit int.

如前所述,除了直接轉(zhuǎn)換可以改變數(shù)據(jù)類型外,還可以通過圖像的顏色空間轉(zhuǎn)換來改變數(shù)據(jù)類型。常用的顏色空間有灰度空間、rgb空間、hsv空間和cmyk空間。顏色空間轉(zhuǎn)換以后,圖片類型都變成了float型。所有的顏色空間轉(zhuǎn)換函數(shù),都放在skimage的color模塊內(nèi)。

例:rgb轉(zhuǎn)灰度圖from skimage import io,data,color

img=data.lena()

gray=color.rgb2gray(img)

io.imshow(gray)

其它的轉(zhuǎn)換,用法都是一樣的,列舉常用的如下:skimage.color.rgb2grey(rgb)

skimage.color.rgb2hsv(rgb)

skimage.color.rgb2lab(rgb)

skimage.color.gray2rgb(image)

skimage.color.hsv2rgb(hsv)

skimage.color.lab2rgb(lab)

實際上,上面的所有轉(zhuǎn)換函數(shù),都可以用一個函數(shù)來代替skimage.color.convert_colorspace(arr, fromspace, tospace)

表示將arr從fromspace顏色空間轉(zhuǎn)換到tospace顏色空間。

例:rgb轉(zhuǎn)hsvfrom skimage import io,data,color

img=data.lena()

hsv=color.convert_colorspace(img,'RGB','HSV')

io.imshow(hsv)

在color模塊的顏色空間轉(zhuǎn)換函數(shù)中,還有一個比較有用的函數(shù)是

skimage.color.label2rgb(arr), 可以根據(jù)標簽值對圖片進行著色。以后的圖片分類后著色就可以用這個函數(shù)。

例:將lena圖片分成三類,然后用默認顏色對三類進行著色from skimage import io,data,color

import numpy as np

img=data.lena()

gray=color.rgb2gray(img)

rows,cols=gray.shape

labels=np.zeros([rows,cols])

for i in range(rows):

for j in range(cols):

if(gray[i,j]<0.4):

labels[i,j]=0

elif(gray[i,j]<0.75):

labels[i,j]=1

else:

labels[i,j]=2

dst=color.label2rgb(labels)

io.imshow(dst)

五、圖像的繪制

實際上前面我們就已經(jīng)用到了圖像的繪制,如:io.imshow(img)

這一行代碼的實質(zhì)是利用matplotlib包對圖片進行繪制,繪制成功后,返回一個matplotlib類型的數(shù)據(jù)。因此,我們也可以這樣寫:import matplotlib.pyplot as plt

plt.imshow(img)

imshow()函數(shù)格式為:matplotlib.pyplot.imshow(X, cmap=None)

X: 要繪制的圖像或數(shù)組。cmap: 顏色圖譜(colormap), 默認繪制為RGB(A)顏色空間。其它可選的顏色圖譜如下列表:顏色圖譜 描述

autumn 紅-橙-黃

bone 黑-白,x線

cool 青-洋紅

copper 黑-銅

flag 紅-白-藍-黑

gray 黑-白

hot 黑-紅-黃-白

hsv hsv顏色空間, 紅-黃-綠-青-藍-洋紅-紅

inferno 黑-紅-黃

jet 藍-青-黃-紅

magma 黑-紅-白

pink 黑-粉-白

plasma 綠-紅-黃

prism 紅-黃-綠-藍-紫-...-綠模式

spring 洋紅-黃

summer 綠-黃

viridis 藍-綠-黃

winter 藍-綠

用的比較多的有g(shù)ray,jet等,如:plt.imshow(image,plt.cm.gray)

plt.imshow(img,cmap=plt.cm.jet)

在窗口上繪制完圖片后,返回一個AxesImage對象。要在窗口上顯示這個對象,我們可以調(diào)用show()函數(shù)來進行顯示,但進行練習的時候(ipython環(huán)境中),一般我們可以省略show()函數(shù),也能自動顯示出來。from skimage import io,data

img=data.astronaut()

dst=io.imshow(img)

print(type(dst))

io.show()

可以看到,類型是'matplotlib.image.AxesImage'。顯示一張圖片,我們通常更愿意這樣寫:import matplotlib.pyplot as plt

from skimage import io,data

img=data.astronaut()

plt.imshow(img)

plt.show()

matplotlib是一個專業(yè)繪圖的庫,相當于matlab中的plot,可以設(shè)置多個figure窗口,設(shè)置figure的標題,隱藏坐標尺,甚至可以使用subplot在一個figure中顯示多張圖片。一般我們可以這樣導入matplotlib庫:import matplotlib.pyplot as plt

也就是說,我們繪圖實際上用的是matplotlib包的pyplot模塊。用figure函數(shù)和subplot函數(shù)分別創(chuàng)建主窗口與子圖。分開并同時顯示宇航員圖片的三個通道from skimage import data

import matplotlib.pyplot as plt

img=data.astronaut()

plt.figure(num='astronaut',figsize=(8,8)) #創(chuàng)建一個名為astronaut的窗口,并設(shè)置大小

plt.subplot(2,2,1) #將窗口分為兩行兩列四個子圖,則可顯示四幅圖片

plt.title('origin image') #第一幅圖片標題

plt.imshow(img) #繪制第一幅圖片

plt.subplot(2,2,2) #第二個子圖

plt.title('R channel') #第二幅圖片標題

plt.imshow(img[:,:,0],plt.cm.gray) #繪制第二幅圖片,且為灰度圖

plt.axis('off') #不顯示坐標尺寸

plt.subplot(2,2,3) #第三個子圖

plt.title('G channel') #第三幅圖片標題

plt.imshow(img[:,:,1],plt.cm.gray) #繪制第三幅圖片,且為灰度圖

plt.axis('off') #不顯示坐標尺寸

plt.subplot(2,2,4) #第四個子圖

plt.title('B channel') #第四幅圖片標題

plt.imshow(img[:,:,2],plt.cm.gray) #繪制第四幅圖片,且為灰度圖

plt.axis('off') #不顯示坐標尺寸

plt.show() #顯示窗口

在圖片繪制過程中,我們用matplotlib.pyplot模塊下的figure()函數(shù)來創(chuàng)建顯示窗口,該函數(shù)的格式為:matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None)

所有參數(shù)都是可選的,都有默認值,因此調(diào)用該函數(shù)時可以不帶任何參數(shù),其中:num: 整型或字符型都可以。如果設(shè)置為整型,則該整型數(shù)字表示窗口的序號。如果設(shè)置為字符型,則該字符串表示窗口的名稱。用該參數(shù)來命名窗口,如果兩個窗口序號或名相同,則后一個窗口會覆蓋前一個窗口。

figsize: 設(shè)置窗口大小。是一個tuple型的整數(shù),如figsize=(8,8)

dpi: 整形數(shù)字,表示窗口的分辨率。

facecolor: 窗口的背景顏色。

edgecolor: 窗口的邊框顏色。

用figure()函數(shù)創(chuàng)建的窗口,只能顯示一幅圖片,如果想要顯示多幅圖片,則需要將這個窗口再劃分為幾個子圖,在每個子圖中顯示不同的圖片。我們可以使用subplot()函數(shù)來劃分子圖,函數(shù)格式為:matplotlib.pyplot.subplot(nrows, ncols, plot_number)nrows: 子圖的行數(shù)。

ncols: 子圖的列數(shù)。

plot_number: 當前子圖的編號。

如:plt.subplot(2,2,1)

則表示將figure窗口劃分成了2行2列共4個子圖,當前為第1個子圖。我們有時也可以用這種寫法:plt.subplot(221)

兩種寫法效果是一樣的。每個子圖的標題可用title()函數(shù)來設(shè)置,是否使用坐標尺可用axis()函數(shù)來設(shè)置,如:plt.subplot(221)

plt.title("first subwindow")

plt.axis('off')

用subplots來創(chuàng)建顯示窗口與劃分子圖

除了上面那種方法創(chuàng)建顯示窗口和劃分子圖,還有另外一種編寫方法也可以,如下例:import matplotlib.pyplot as plt

from skimage import data,color

img = data.immunohistochemistry()

hsv = color.rgb2hsv(img)

fig, axes = plt.subplots(2, 2, figsize=(7, 6))

ax0, ax1, ax2, ax3 = axes.ravel()

ax0.imshow(img)

ax0.set_title("Original image")

ax1.imshow(hsv[:, :, 0], cmap=plt.cm.gray)

ax1.set_title("H")

ax2.imshow(hsv[:, :, 1], cmap=plt.cm.gray)

ax2.set_title("S")

ax3.imshow(hsv[:, :, 2], cmap=plt.cm.gray)

ax3.set_title("V")

for ax in axes.ravel():

ax.axis('off')

fig.tight_layout() #自動調(diào)整subplot間的參數(shù)

直接用subplots()函數(shù)來創(chuàng)建并劃分窗口。注意,比前面的subplot()函數(shù)多了一個s,該函數(shù)格式為:matplotlib.pyplot.subplots(nrows=1, ncols=1)。

nrows: 所有子圖行數(shù),默認為1。

ncols: 所有子圖列數(shù),默認為1。

返回一個窗口figure, 和一個tuple型的ax對象,該對象包含所有的子圖,可結(jié)合ravel()函數(shù)列出所有子圖,如:fig, axes = plt.subplots(2, 2, figsize=(7, 6))

ax0, ax1, ax2, ax3 = axes.ravel()

創(chuàng)建了2行2列4個子圖,分別取名為ax0,ax1,ax2和ax3, 每個子圖的標題用set_title()函數(shù)來設(shè)置,如:ax0.imshow(img)

ax0.set_title("Original image")

如果有多個子圖,我們還可以使用tight_layout()函數(shù)來調(diào)整顯示的布局,該函數(shù)格式為:matplotlib.pyplot.tight_layout(pad=1.08, h_pad=None, w_pad=None, rect=None)

所有的參數(shù)都是可選的,調(diào)用該函數(shù)時可省略所有的參數(shù)。pad: 主窗口邊緣和子圖邊緣間的間距,默認為1.08

h_pad, w_pad: 子圖邊緣之間的間距,默認為 pad_inches

rect: 一個矩形區(qū)域,如果設(shè)置這個值,則將所有的子圖調(diào)整到這個矩形區(qū)域內(nèi)。

一般調(diào)用為:plt.tight_layout() #自動調(diào)整subplot間的參數(shù)

其它方法繪圖并顯示

除了使用matplotlib庫來繪制圖片,skimage還有另一個子模塊viewer,也提供一個函數(shù)來顯示圖片。不同的是,它利用Qt工具來創(chuàng)建一塊畫布,從而在畫布上繪制圖像。

例:from skimage import data

from skimage.viewer import ImageViewer

img = data.coins()

viewer = ImageViewer(img)

viewer.show()

最后總結(jié)一下,繪制和顯示圖片常用到的函數(shù)有:函數(shù)名 功能 調(diào)用格式

figure 創(chuàng)建一個顯示窗口 plt.figure(num=1,figsize=(8,8)

imshow 繪制圖片 plt.imshow(image)

show 顯示窗口 plt.show()

subplot 劃分子圖 plt.subplot(2,2,1)

title 設(shè)置子圖標題(與subplot結(jié)合使用) plt.title('origin image')

axis 是否顯示坐標尺 plt.axis('off')

subplots 創(chuàng)建帶有多個子圖的窗口 fig,axes=plt.subplots(2,2,figsize=(8,8))

ravel 為每個子圖設(shè)置變量 ax0,ax1,ax2,ax3=axes.ravel()

set_title 設(shè)置子圖標題(與axes結(jié)合使用) ax0.set_title('first window')

tight_layout 自動調(diào)整子圖顯示布局 plt.tight_layout()

六、圖像的批量處理

有些時候,我們不僅要對一張圖片進行處理,可能還會對一批圖片處理。這時候,我們可以通過循環(huán)來執(zhí)行處理,也可以調(diào)用程序自帶的圖片集合來處理。圖片集合函數(shù)為:skimage.io.ImageCollection(load_pattern,load_func=None)

這個函數(shù)是放在io模塊內(nèi)的,帶兩個參數(shù),第一個參數(shù)load_pattern, 表示圖片組的路徑,可以是一個str字符串。第二個參數(shù)load_func是一個回調(diào)函數(shù),我們對圖片進行批量處理就可以通過這個回調(diào)函數(shù)實現(xiàn)。回調(diào)函數(shù)默認為imread(),即默認這個函數(shù)是批量讀取圖片。先看一個例子:import skimage.io as io

from skimage import data_dir

str=data_dir + '/*.png'

coll = io.ImageCollection(str)

print(len(coll))

顯示結(jié)果為25, 說明系統(tǒng)自帶了25張png的示例圖片,這些圖片都讀取了出來,放在圖片集合coll里。如果我們想顯示其中一張圖片,則可以在后加上一行代碼:io.imshow(coll[10])

如果一個文件夾里,我們既存放了一些jpg格式的圖片,又存放了一些png格式的圖片,現(xiàn)在想把它們?nèi)孔x取出來,該怎么做呢?import skimage.io as io

from skimage import data_dir

str='d:/pic/*.jpg:d:/pic/*.png'

coll = io.ImageCollection(str)

print(len(coll))

注意這個地方'd:/pic/.jpg:d:/pic/.png' ,是兩個字符串合在一起的,第一個是'd:/pic/.jpg', 第二個是'd:/pic/.png' ,合在一起后,中間用冒號來隔開,這樣就可以把d:/pic/文件夾下的jpg和png格式的圖片都讀取出來。如果還想讀取存放在其它地方的圖片,也可以一并加進去,只是中間同樣用冒號來隔開。io.ImageCollection()這個函數(shù)省略第二個參數(shù),就是批量讀取。如果我們不是想批量讀取,而是其它批量操作,如批量轉(zhuǎn)換為灰度圖,那又該怎么做呢?那就需要先定義一個函數(shù),然后將這個函數(shù)作為第二個參數(shù),如:from skimage import data_dir,io,color

def convert_gray(f):

rgb=io.imread(f)

return color.rgb2gray(rgb)

str=data_dir+'/*.png'

coll = io.ImageCollection(str,load_func=convert_gray)

io.imshow(coll[10])

這種批量操作對視頻處理是極其有用的,因為視頻就是一系列的圖片組合from skimage import data_dir,io,color

class AVILoader:

video_file = 'myvideo.avi'

def __call__(self, frame):

return video_read(self.video_file, frame)

avi_load = AVILoader()

frames = range(0, 1000, 10) # 0, 10, 20, ...ic =io.ImageCollection(frames, load_func=avi_load)

這段代碼的意思,就是將myvideo.avi這個視頻中每隔10幀的圖片讀取出來,放在圖片集合中。

得到圖片集合以后,我們還可以將這些圖片連接起來,構(gòu)成一個維度更高的數(shù)組,連接圖片的函數(shù)為:skimage.io.concatenate_images(ic)

帶一個參數(shù),就是以上的圖片集合,如:from skimage import data_dir,io,color

coll = io.ImageCollection('d:/pic/*.jpg')

mat=io.concatenate_images(coll)

使用concatenate_images(ic)函數(shù)的前提是讀取的這些圖片尺寸必須一致,否則會出錯。我們看看圖片連接前后的維度變化:from skimage import data_dir,io,color

coll = io.ImageCollection('d:/pic/*.jpg')

print(len(coll)) #連接的圖片數(shù)量

print(coll[0].shape) #連接前的圖片尺寸,所有的都一樣

mat=io.concatenate_images(coll)

print(mat.shape) #連接后的數(shù)組尺寸

顯示結(jié)果:2

(870, 580, 3)

(2, 870, 580, 3)

可以看到,將2個3維數(shù)組,連接成了一個4維數(shù)組

如果我們對圖片進行批量操作后,想把操作后的結(jié)果保存起來,也是可以辦到的。

例:把系統(tǒng)自帶的所有png示例圖片,全部轉(zhuǎn)換成256256的jpg格式灰度圖,保存在d:/data/文件夾下*

改變圖片的大小,我們可以使用tranform模塊的resize()函數(shù),后續(xù)會講到這個模塊。from skimage import data_dir,io,transform,color

import numpy as np

def convert_gray(f):

rgb=io.imread(f) #依次讀取rgb圖片

gray=color.rgb2gray(rgb) #將rgb圖片轉(zhuǎn)換成灰度圖

dst=transform.resize(gray,(256,256)) #將灰度圖片大小轉(zhuǎn)換為256*256

return dst str=data_dir+'/*.png'

coll = io.ImageCollection(str,load_func=convert_gray)

for i in range(len(coll)):

io.imsave('d:/data/'+np.str(i)+'.jpg',coll[i]) #循環(huán)保存圖片

七、圖像的形變與縮放

圖像的形變與縮放,使用的是skimage的transform模塊,函數(shù)比較多,功能齊全。

1、改變圖片尺寸resize

函數(shù)格式為:skimage.transform.resize(image, output_shape)image: 需要改變尺寸的圖片

output_shape: 新的圖片尺寸from skimage import transform,data

import matplotlib.pyplot as plt

img = data.camera()

dst=transform.resize(img, (80, 60))

plt.figure('resize')

plt.subplot(121)

plt.title('before resize')

plt.imshow(img,plt.cm.gray)

plt.subplot(122)

plt.title('before resize')

plt.imshow(dst,plt.cm.gray)

plt.show()

將camera圖片由原來的512x512大小,變成了80x60大小。從下圖中的坐標尺,我們能夠看出來:

2、按比例縮放rescale

函數(shù)格式為:skimage.transform.rescale(image, scale[, ...])

scale參數(shù)可以是單個float數(shù),表示縮放的倍數(shù),也可以是一個float型的tuple,如[0.2,0.5],表示將行列數(shù)分開進行縮放from skimage import transform,data

img = data.camera()

print(img.shape) #圖片原始大小

print(transform.rescale(img, 0.1).shape) #縮小為原來圖片大小的0.1

print(transform.rescale(img, [0.5,0.25]).shape) #縮小為原來圖片行數(shù)一半,列數(shù)四分之一

print(transform.rescale(img, 2).shape) #放大為原來圖片大小的2倍

結(jié)果為:(512, 512)

(51, 51)

(256, 128)

(1024, 1024)

3、旋轉(zhuǎn)rotateskimage.transform.rotate(image, angle[, ...],resize=False)

angle參數(shù)是個float類型數(shù),表示旋轉(zhuǎn)的度數(shù)

resize用于控制在旋轉(zhuǎn)時,是否改變大小 ,默認為Falsefrom skimage import transform,data

import matplotlib.pyplot as plt

img = data.camera()

print(img.shape) #圖片原始大小

img1=transform.rotate(img, 60) #旋轉(zhuǎn)90度,不改變大小

print(img1.shape)

img2=transform.rotate(img, 30,resize=True) #旋轉(zhuǎn)30度,同時改變大小

print(img2.shape) plt.figure('resize')

plt.subplot(121)plt.title('rotate 60')

plt.imshow(img1,plt.cm.gray)

plt.subplot(122)

plt.title('rotate 30')

plt.imshow(img2,plt.cm.gray)

plt.show()

4、圖像金字塔

以多分辨率來解釋圖像的一種有效但概念簡單的結(jié)構(gòu)就是圖像金字塔。圖像金字塔最初用于機器視覺和圖像壓縮,一幅圖像的金字塔是一系列以金字塔形狀排列的分辨率逐步降低的圖像集合。金字塔的底部是待處理圖像的高分辨率表示,而頂部是低分辨率的近似。當向金字塔的上層移動時,尺寸和分辨率就降低。在此,我們舉一個高斯金字塔的應(yīng)用實例,函數(shù)原型為:skimage.transform.pyramid_gaussian(image, downscale=2)

downscale控制著金字塔的縮放比例import numpy as np

import matplotlib.pyplot as plt

from skimage import data,transform

image = data.astronaut() #載入宇航員圖片

rows, cols, dim = image.shape #獲取圖片的行數(shù),列數(shù)和通道數(shù)

pyramid = tuple(transform.pyramid_gaussian(image, downscale=2)) #產(chǎn)生高斯金字塔圖像#共生成了log(512)=9幅金字塔圖像,加上原始圖像共10幅,pyramid[0]-pyramid[1]

composite_image = np.ones((rows, cols + cols / 2, 3), dtype=np.double) #生成背景composite_image[:rows, :cols, :] = pyramid[0] #融合原始圖像

i_row = 0

for p in pyramid[1:]:

n_rows, n_cols = p.shape[:2]

composite_image[i_row:i_row + n_rows, cols:cols + n_cols] = p #循環(huán)融合9幅金字塔圖像

i_row += n_rows

plt.imshow(composite_image)

plt.show()

上右圖,就是10張金字塔圖像,下標為0的表示原始圖像,后面每層的圖像行和列變?yōu)樯弦粚拥囊话?#xff0c;直至變?yōu)?

除了高斯金字塔外,還有其它的金字塔,如:skimage.transform.pyramid_laplacian(image, downscale=2)

八、對比度與亮度調(diào)整

圖像亮度與對比度的調(diào)整,是放在skimage包的exposure模塊里面

1、gamma調(diào)整

原理:I=Ig

對原圖像的像素,進行冪運算,得到新的像素值。公式中的g就是gamma值。

如果gamma>1, 新圖像比原圖像暗

如果gamma<1,新圖像比原圖像亮

函數(shù)格式為:skimage.exposure.adjust_gamma(image, gamma=1)

gamma參數(shù)默認為1,原像不發(fā)生變化 。from skimage import data, exposure, img_as_float

import matplotlib.pyplot as plt

image = img_as_float(data.moon())

gam1= exposure.adjust_gamma(image, 2) #調(diào)暗

gam2= exposure.adjust_gamma(image, 0.5) #調(diào)亮plt.figure('adjust_gamma',figsize=(8,8))

plt.subplot(131)plt.title('origin image')

plt.imshow(image,plt.cm.gray)plt.axis('off')

plt.subplot(132)

plt.title('gamma=2')

plt.imshow(gam1,plt.cm.gray)

plt.axis('off')

plt.subplot(133)

plt.title('gamma=0.5')

plt.imshow(gam2,plt.cm.gray)

plt.axis('off')

plt.show()

2、log對數(shù)調(diào)整

這個剛好和gamma相反

原理:I=log(I)from skimage import data, exposure, img_as_float

import matplotlib.pyplot as plt

image = img_as_float(data.moon())

gam1= exposure.adjust_log(image) #對數(shù)調(diào)整

plt.figure('adjust_gamma',figsize=(8,8))

plt.subplot(121)plt.title('origin image')

plt.imshow(image,plt.cm.gray)

plt.axis('off')

plt.subplot(122)

plt.title('log')

plt.imshow(gam1,plt.cm.gray)

plt.axis('off')

plt.show()

3、判斷圖像對比度是否偏低

函數(shù):is_low_contrast(img)

返回一個bool型值from skimage import data, exposure

image =data.moon()

result=exposure.is_low_contrast(image)

print(result)

輸出為False

4、調(diào)整強度

函數(shù):skimage.exposure.rescale_intensity(image, in_range='image', out_range='dtype')

in_range 表示輸入圖片的強度范圍,默認為'image', 表示用圖像的最大/最小像素值作為范圍

out_range 表示輸出圖片的強度范圍,默認為'dype', 表示用圖像的類型的最大/最小值作為范圍

默認情況下,輸入圖片的[min,max]范圍被拉伸到[dtype.min, dtype.max],如果dtype=uint8, 那么dtype.min=0, dtype.max=255import numpy as np

from skimage import exposure

image = np.array([51, 102, 153], dtype=np.uint8)

mat=exposure.rescale_intensity(image)

print(mat)

輸出為[ 0 127 255]

即像素最小值由51變?yōu)?,最大值由153變?yōu)?55,整體進行了拉伸,但是數(shù)據(jù)類型沒有變,還是uint8

前面我們講過,可以通過img_as_float()函數(shù)將unit8類型轉(zhuǎn)換為float型,實際上還有更簡單的方法,就是乘以1.0import numpy as np

image = np.array([51, 102, 153], dtype=np.uint8)

print(image*1.0)

即由[51,102,153]變成了[ 51. 102. 153.]

而float類型的范圍是[0,1],因此對float進行rescale_intensity 調(diào)整后,范圍變?yōu)閇0,1],而不是[0,255]import numpy as np

from skimage import exposure

image = np.array([51, 102, 153], dtype=np.uint8)

tmp=image*1.0

mat=exposure.rescale_intensity(tmp)

print(mat)

結(jié)果為[ 0. 0.5 1. ]

如果原始像素值不想被拉伸,只是等比例縮小,就使用in_range參數(shù),如:import numpy as np

from skimage import exposure

image = np.array([51, 102, 153], dtype=np.uint8)

tmp=image*1.0

mat=exposure.rescale_intensity(tmp,in_range=(0,255))

print(mat)

輸出為:[ 0.2 0.4 0.6],即原像素值除以255

如果參數(shù)in_range的[main,max]范圍要比原始像素值的范圍[min,max] 大或者小,那就進行裁剪,如:mat=exposure.rescale_intensity(tmp,in_range=(0,102))

print(mat)

輸出[ 0.5 1. 1. ],即原像素值除以102,超出1的變?yōu)?

如果一個數(shù)組里面有負數(shù),現(xiàn)在想調(diào)整到正數(shù),就使用out_range參數(shù)。如:import numpy as np

from skimage import exposure

image = np.array([-10, 0, 10], dtype=np.int8)

mat=exposure.rescale_intensity(image, out_range=(0, 127))

print(mat)

輸出[ 0 63 127]

九、直方圖與均衡化

在圖像處理中,直方圖是非常重要,也是非常有用的一個處理要素。在skimage庫中對直方圖的處理,是放在exposure這個模塊中。

1、計算直方圖

函數(shù):skimage.exposure.histogram(image, nbins=256)

在numpy包中,也提供了一個計算直方圖的函數(shù)histogram(),兩者大同小義。返回一個tuple(hist, bins_center), 前一個數(shù)組是直方圖的統(tǒng)計量,后一個數(shù)組是每個bin的中間值import numpy as np

from skimage import exposure,data

image =data.camera()*1.0

hist1=np.histogram(image, bins=2) #用numpy包計算直方圖hist2=exposure.histogram(image, nbins=2) #用skimage計算直方圖

print(hist1)

print(hist2)

輸出:(array([107432, 154712], dtype=int64), array([ 0. , 127.5, 255. ]))

(array([107432, 154712], dtype=int64), array([ 63.75, 191.25]))

分成兩個bin,每個bin的統(tǒng)計量是一樣的,但numpy返回的是每個bin的兩端的范圍值,而skimage返回的是每個bin的中間值

2、繪制直方圖

繪圖都可以調(diào)用matplotlib.pyplot庫來進行,其中的hist函數(shù)可以直接繪制直方圖。調(diào)用方式:n, bins, patches = plt.hist(arr, bins=10, normed=0, facecolor='black', edgecolor='black',alpha=1,histtype='bar')

hist的參數(shù)非常多,但常用的就這六個,只有第一個是必須的,后面四個可選arr: 需要計算直方圖的一維數(shù)組

bins: 直方圖的柱數(shù),可選項,默認為10

normed: 是否將得到的直方圖向量歸一化。默認為0

facecolor: 直方圖顏色

edgecolor: 直方圖邊框顏色

alpha: 透明度

histtype: 直方圖類型,‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’

返回值 :n: 直方圖向量,是否歸一化由參數(shù)normed設(shè)定

bins: 返回各個bin的區(qū)間范圍

patches: 返回每個bin里面包含的數(shù)據(jù),是一個listfrom skimage import data

import matplotlib.pyplot as plt

img=data.camera()

plt.figure("hist")

arr=img.flatten()

n, bins, patches = plt.hist(arr, bins=256, normed=1,edgecolor='None',facecolor='red')

plt.show()

其中的flatten()函數(shù)是numpy包里面的,用于將二維數(shù)組序列化成一維數(shù)組。

是按行序列,如mat=[[1 2 3

4 5 6]]

經(jīng)過 mat.flatten()后,就變成了mat=[1 2 3 4 5 6]

3、彩色圖片三通道直方圖

一般來說直方圖都是征對灰度圖的,如果要畫rgb圖像的三通道直方圖,實際上就是三個直方圖的疊加。from skimage import data

import matplotlib.pyplot as plt

img=data.lena()

ar=img[:,:,0].flatten()

plt.hist(ar, bins=256, normed=1,facecolor='r',edgecolor='r',hold=1)

ag=img[:,:,1].flatten()

plt.hist(ag, bins=256, normed=1, facecolor='g',edgecolor='g',hold=1)

ab=img[:,:,2].flatten()

plt.hist(ab, bins=256, normed=1, facecolor='b',edgecolor='b')

plt.show()

其中,加一個參數(shù)hold=1,表示可以疊加

4、直方圖均衡化

如果一副圖像的像素占有很多的灰度級而且分布均勻,那么這樣的圖像往往有高對比度和多變的灰度色調(diào)。直方圖均衡化就是一種能僅靠輸入圖像直方圖信息自動達到這種效果的變換函數(shù)。它的基本思想是對圖像中像素個數(shù)多的灰度級進行展寬,而對圖像中像素個數(shù)少的灰度進行壓縮,從而擴展取值的動態(tài)范圍,提高了對比度和灰度色調(diào)的變化,使圖像更加清晰。from skimage import data,exposure

import matplotlib.pyplot as plt

img=data.moon()

plt.figure("hist",figsize=(8,8))

arr=img.flatten()

plt.subplot(221)

plt.imshow(img,plt.cm.gray) #原始圖像

plt.subplot(222)

plt.hist(arr, bins=256, normed=1,edgecolor='None',facecolor='red') #原始圖像直方圖

img1=exposure.equalize_hist(img)

arr1=img1.flatten()

plt.subplot(223)

plt.imshow(img1,plt.cm.gray) #均衡化圖像

plt.subplot(224)

plt.hist(arr1, bins=256, normed=1,edgecolor='None',facecolor='red') #均衡化直方圖

plt.show()

十、CLAHE

skimage.exposure.``equalize_adapthist(image, kernel_size=None, clip_limit=0.01, nbins=256)

An algorithm for local contrast enhancement, that uses histograms computed over different tile regions of the image. Local details can therefore be enhanced even in regions that are darker or lighter than most of the image.

image : (M, N[, C]) ndarrayInput image.

kernel_size: integer or list-like, optional

Defines the shape of contextual regions used in the algorithm. If iterable is passed, it must have the same number of elements as image.ndim (without color channel). If integer, it is broadcasted to each image dimension. By default, kernel_size is 1/8 of image height by 1/8 of its width.

clip_limit : float, optionalClipping limit, normalized between 0 and 1 (higher values give more contrast).

nbins : int, optional

Number of gray bins for histogram (“data range”).

| Returns: |

out : (M, N[, C]) ndarrayEqualized image.from skimage import data,exposure

import matplotlib.pyplot as plt

#%matplotlib notebook

clip_limitnumber=0.01

img=data.moon()

print(img.shape)

plt.figure("hist",figsize=(8,8))

arr=img.flatten()

plt.subplot(5,2,1)

plt.title('original')

plt.imshow(img,plt.cm.gray) #原始圖像

plt.subplot(5,2,2)

plt.hist(arr, bins=256, normed=1,edgecolor='None',facecolor='red') #原始圖像直方圖

# #img1=exposure.equalize_hist(img)

# img1=exposure.equalize_hist(img)

# arr1=img1.flatten()

# plt.subplot(6,2,3)

# plt.title('equalize_hist')

# plt.imshow(img1,plt.cm.gray) #均衡化圖像

# plt.subplot(6,2,4)

# plt.hist(arr1, bins=256, normed=1,edgecolor='None',facecolor='red') #均衡化直方圖

# plt.show()

img2=exposure.equalize_adapthist(img, kernel_size=256, clip_limit=clip_limitnumber, nbins=256)

arr2=img2.flatten()

plt.subplot(5,2,3)

plt.title('equalize_adapthist-256-'+ str(clip_limitnumber))

plt.imshow(img2,plt.cm.gray) #均衡化圖像

plt.subplot(5,2,4)

plt.hist(arr2, bins=256, normed=1,edgecolor='None',facecolor='red') #均衡化直方圖

plt.show()

img3=exposure.equalize_adapthist(img, kernel_size=128, clip_limit=clip_limitnumber, nbins=256)

arr3=img3.flatten()

plt.subplot(5,2,5)

plt.title('equalize_adapthist-128-'+ str(clip_limitnumber))

plt.imshow(img3,plt.cm.gray) #均衡化圖像

plt.subplot(5,2,6)

plt.hist(arr3, bins=256, normed=1,edgecolor='None',facecolor='red') #均衡化直方圖

plt.show()

img4=exposure.equalize_adapthist(img, kernel_size=64, clip_limit=clip_limitnumber, nbins=256)

arr4=img4.flatten()

plt.subplot(5,2,7)

plt.title('equalize_adapthist-64-'+ str(clip_limitnumber))

plt.imshow(img4,plt.cm.gray) #均衡化圖像

plt.subplot(5,2,8)

plt.hist(arr4, bins=256, normed=1,edgecolor='None',facecolor='red') #均衡化直方圖

plt.show()

img5=exposure.equalize_adapthist(img, kernel_size=32, clip_limit=clip_limitnumber, nbins=256)

arr5=img5.flatten()

plt.subplot(5,2,9)

plt.title('equalize_adapthist-32-'+ str(clip_limitnumber))

plt.imshow(img5,plt.cm.gray) #均衡化圖像

plt.subplot(5,2,10)

plt.hist(arr5, bins=256, normed=1,edgecolor='None',facecolor='red') #均衡化直方圖

plt.show()from skimage import data,exposure

import matplotlib.pyplot as plt

#%matplotlib notebook

kernel_sizenuber=64

img=data.moon()

print(img.shape)

plt.figure("hist",figsize=(8,8))

arr=img.flatten()

plt.subplot(5,2,1)

plt.title('original')

plt.imshow(img,plt.cm.gray) #原始圖像

plt.subplot(5,2,2)

plt.hist(arr, bins=256, normed=1,edgecolor='None',facecolor='red') #原始圖像直方圖

# #img1=exposure.equalize_hist(img)

# img1=exposure.equalize_hist(img)

# arr1=img1.flatten()

# plt.subplot(6,2,3)

# plt.title('equalize_hist')

# plt.imshow(img1,plt.cm.gray) #均衡化圖像

# plt.subplot(6,2,4)

# plt.hist(arr1, bins=256, normed=1,edgecolor='None',facecolor='red') #均衡化直方圖

# plt.show()

img2=exposure.equalize_adapthist(img, kernel_size=kernel_sizenuber, clip_limit=0.001, nbins=256)

arr2=img2.flatten()

plt.subplot(5,2,3)

plt.title('equalize_adapthist-'+ str(kernel_sizenuber)+'-0.001')

plt.imshow(img2,plt.cm.gray) #均衡化圖像

plt.subplot(5,2,4)

plt.hist(arr2, bins=256, normed=1,edgecolor='None',facecolor='red') #均衡化直方圖

plt.show()

img3=exposure.equalize_adapthist(img, kernel_size=kernel_sizenuber, clip_limit=0.005, nbins=256)

arr3=img3.flatten()

plt.subplot(5,2,5)

plt.title('equalize_adapthist-'+ str(kernel_sizenuber)+'-0.005')

plt.imshow(img3,plt.cm.gray) #均衡化圖像

plt.subplot(5,2,6)

plt.hist(arr3, bins=256, normed=1,edgecolor='None',facecolor='red') #均衡化直方圖

plt.show()

img4=exposure.equalize_adapthist(img, kernel_size=kernel_sizenuber, clip_limit=0.01, nbins=256)

arr4=img4.flatten()

plt.subplot(5,2,7)

plt.title('equalize_adapthist-'+ str(kernel_sizenuber)+'-0.01')

plt.imshow(img4,plt.cm.gray) #均衡化圖像

plt.subplot(5,2,8)

plt.hist(arr4, bins=256, normed=1,edgecolor='None',facecolor='red') #均衡化直方圖

plt.show()

img5=exposure.equalize_adapthist(img, kernel_size=kernel_sizenuber, clip_limit=0.05, nbins=256)

arr5=img5.flatten()

plt.subplot(5,2,9)

plt.title('equalize_adapthist-'+ str(kernel_sizenuber)+'-0.05')

plt.imshow(img5,plt.cm.gray) #均衡化圖像

plt.subplot(5,2,10)

plt.hist(arr5, bins=256, normed=1,edgecolor='None',facecolor='red') #均衡化直方圖

plt.show()

三、各種imread函數(shù)的區(qū)別與聯(lián)系

先來看看常用的讀取圖片的方式:PIL.Image.open

scipy.misc.imread

scipy.ndimage.imread

cv2.imread

matplotlib.image.imread

skimge

caffe.io.load_iamge

這些方法可以分為四大家族:

一、PILPIL.Image.open + numpy

scipy.misc.imread

scipy.ndimage.imread

這些方法都是通過調(diào)用PIL.Image.open 讀取圖像的信息; PIL.Image.open 不直接返回numpy對象,可以用numpy提供的函數(shù)進行轉(zhuǎn)換,參考Image和Ndarray互相轉(zhuǎn)換; 其他模塊都直接返回numpy.ndarray對象,通道順序為RGB,通道值得默認范圍為0-255。

二、matplotlibmatplot.image.imread

從名字中可以看出這個模塊是具有matlab風格的,直接返回numpy.ndarray格式通道順序是RGB,通道值默認范圍0-255。

三、opencvcv2.imread

使用opencv讀取圖像,直接返回numpy.ndarray 對象,通道順序為BGR ,注意是BGR,通道值默認范圍0-255。

四、skimageskimage.io.imread: 直接返回numpy.ndarray 對象,通道順序為RGB,通道值默認范圍0-255。

caffe.io.load_image: 沒有調(diào)用默認的skimage.io.imread,返回值為0-1的float型數(shù)據(jù),通道順序為RGB

關(guān)于圖像的一些說明:

可以使用matplotlib的pyplot模塊的show也可以使用cv2的imshow方法,對于這些方法只要你傳入的參數(shù)是numpy.ndarray(通道值范圍0-255) 就可以正常顯示,不存在區(qū)別,這也可以看出numpy在python中的重要地位;但是cv2.imshow方法由于它針對的是cv2的imread 所以它內(nèi)部會做通道順序的變化,傳入為BGR轉(zhuǎn)換為RGB,所以你如果傳入RGB顯示的就是BGR了。

以下是測試代碼

運行環(huán)境為windows10+python3.6#encoding=utf8

from PIL import Image

import numpy as np

import cv2

import matplotlib.pyplot as plt # plt 用于顯示圖片

import matplotlib.image as mpimg # mpimg 用于讀取圖片

import skimage

import sys

from skimage import io

#PIL

#相關(guān):scipy.misc.imread, scipy.ndimage.imread

#misc.imread 提供可選參數(shù)mode,但本質(zhì)上是調(diào)用PIL,具體的模式可以去看srccode或者document

#https://github.com/scipy/scipy/blob/v0.17.1/scipy/misc/pilutil.py

imagepath='test1.jpg'

im1=Image.open(imagepath)

im1=np.array(im1)#獲得numpy對象,RGB

print(type(im1))

print(im1.shape)

#2 opencv

im2=cv2.imread(imagepath)

print(type(im2))#numpy BGR

print(im2.shape)#[width,height,3]

#3 matplotlib 類似matlab的方式

im3 = mpimg.imread(imagepath)

print(type(im3))#np.array

print(im3.shape)

#4 skimge?

#caffe.io.load_iamge()也是調(diào)用的skimage實現(xiàn)的,返回的是0-1 float型數(shù)據(jù)

im4 = io.imread(imagepath)

print(type(im4))#np.array

print(im4.shape)

#print(im4)

# cv2.imshow('test',im4)

# cv2.waitKey()

#統(tǒng)一使用plt進行顯示,不管是plt還是cv2.imshow,在python中只認numpy.array,但是由于cv2.imread 的圖片是BGR,cv2.imshow 時相應(yīng)的換通道顯示

plt.subplot(221)

plt.title('PIL read')

plt.imshow(im1)

plt.subplot(222)

plt.title('opencv read')

plt.imshow(im2)

plt.subplot(223)

plt.title('matplotlib read')

plt.imshow(im3)

plt.subplot(224)

plt.title('skimage read')

plt.imshow(im4)

#plt.axis('off') # 不顯示坐標軸

plt.show()

##################################### cmd output################################

#

# (851, 1279, 3)

#

# (851, 1279, 3)

#

# (851, 1279, 3)

#

# (851, 1279, 3)

測試結(jié)果:

四、深度學習框架自帶的圖像處理函數(shù)

tensorflow提供了簡單的圖像處理函數(shù),可以對圖像進行預(yù)處理,可以盡量避免模型受到無關(guān)因素的影響。大部分圖像識別問題中,通過圖像預(yù)處理過程可以提高模型的準確率。封裝在類tf.image中。

一、API列表

函數(shù)列表為:adjust_brightness(): 調(diào)整RGB或灰度圖像的亮度。

adjust_contrast(): 調(diào)整RGB或灰度圖像的對比度。

adjust_gamma(): 對輸入圖像執(zhí)行伽瑪校正。

adjust_hue(): 調(diào)整RGB圖像的色調(diào)。

adjust_saturation(): 調(diào)整RGB圖像的飽和度。

central_crop(): 裁剪圖像的中心區(qū)域。

convert_image_dtype(): 將圖像轉(zhuǎn)換為dtype,如果需要可以縮放它的值。

crop_and_resize(): 從輸入的圖像張量中提取作物并對其進行雙線性調(diào)整(可能)。

crop_to_bounding_box(): 將圖像裁剪到指定的邊框。

decode_and_crop_jpeg(): 將圖像裁剪到指定的邊框。

decode_bmp(): 將bmp編碼圖像的第一幀解碼為uint8張量。

decode_gif(): 將gif編碼圖像的第一幀解碼為uint8張量。

decode_image(): bmp、gif、jpeg的解碼函數(shù)

decode_jpeg(): 將jpeg編碼的圖像解碼為uint8張量。

decode_png(): 將png編碼的圖像解碼為uint8或uint16張量。

draw_bounding_boxes(): 在一批圖像上繪制邊框。

encode_jpeg(): 在一幅圖像中進行JPEG編碼。

encode_png(): 在一幅圖像中進行PNG編碼。

extract_glimpse(): 從一個輸入張量中提取一點點。

extract_jpeg_shape(): 提取jpeg編碼圖像的形狀信息。

flip_left_right(): 水平翻轉(zhuǎn)圖像(從左到右)。

flip_up_down(): 垂直翻轉(zhuǎn)圖片(上下顛倒)。

grayscale_to_rgb(): 將一個或多個圖像從灰度轉(zhuǎn)換為RGB。

hsv_to_rgb(): 將一個或多個圖像從HSV轉(zhuǎn)換為RGB。

image_gradients(): 返回每個顏色通道的圖像梯度(dy, dx)。

is_jpeg(): 檢查'內(nèi)容'編碼的JPEG圖像。

non_max_suppression(): 貪婪地選擇按得分降序排列的邊界框子集。

pad_to_bounding_box(): 用0填充指定高度和寬度的圖像。

per_image_standardization(): 線性尺度圖像具有零均值和單位范數(shù)。

psnr(): 返回a和b之間的峰值信噪比。

random_brightness(): 用一個隨機因素調(diào)整圖像的亮度。

random_contrast(): 用隨機因素調(diào)整圖像的對比度。

random_flip_left_right(): 隨機水平翻轉(zhuǎn)圖像(從左到右)。

random_flip_up_down(): 隨機垂直翻轉(zhuǎn)圖像(上下顛倒)。

random_hue(): 通過隨機因素調(diào)整RGB圖像的色調(diào)。

random_saturation(): 通過隨機因素調(diào)整RGB圖像的飽和度。

resize_area(): 使用面積插值調(diào)整圖像的大小。

resize_bicubic(): 使用雙三次插值調(diào)整圖像的大小。

resize_bilinear(): 使用雙線性插值調(diào)整圖像的大小。

resize_image_with_crop_or_pad(): 裁剪和/或?qū)D像填充到目標寬度和高度。

resize_images(): 使用指定的方法調(diào)整圖像的大小。

resize_nearest_neighbor(): 使用最近鄰插值調(diào)整圖像的大小。

rgb_to_grayscale(): 將一個或多個圖像從RGB轉(zhuǎn)換為灰度。

rgb_to_hsv(): 將一個或多個圖像從RGB轉(zhuǎn)換為HSV。

rgb_to_yiq(): 將一個或多個圖像從RGB轉(zhuǎn)換為YIQ。

rgb_to_yuv(): 將一個或多個圖像從RGB轉(zhuǎn)換為YUV。

rot90(): 逆時針旋轉(zhuǎn)圖像90度。

sample_distorted_bounding_box(): 為圖像生成一個隨機扭曲的邊框。

sobel_edges(): 返回一個包含索貝爾邊映射的張量。

ssim(): 計算img1和img2之間的SSIM索引。

ssim_multiscale(): 計算img1和img2之間的MS-SSIM。

total_variation(): 計算并返回一個或多個圖像的總變化量。

transpose_image(): 通過交換高度和寬度維度來轉(zhuǎn)置圖像。

yiq_to_rgb(): 將一個或多個圖像從YIQ轉(zhuǎn)換為RGB。

yuv_to_rgb(): 將一個或多個圖像從YUV轉(zhuǎn)換為RGB。

二、tensorflow圖像處理函數(shù)例程

1、圖像編碼處理

一張RGB彩色模型的圖像可以看成一個三維矩陣,矩陣中的每一個數(shù)表示了圖像上不同的位置,不同顏色的亮度。然而圖像在存儲時并不是直接記錄這些矩陣中的數(shù)字,而是記錄經(jīng)過壓縮編碼之后的結(jié)果。所以要將一張圖片還原成一個三維矩陣,需要解碼過程。tensorflow提供了jpeg和png格式圖像的編碼/解碼的函數(shù)。以下代碼示范了如何使用tensorflow中對jpeg格式圖像進行編碼/解碼。# matplotlib.pyplot是一個python的畫圖工具。下面的代碼將使用這個工具

# 來可視化經(jīng)過tensorflow處理的圖像。

import matplotlib.pyplot as plt

import tensorflow as tf

# 讀取圖像的原始數(shù)據(jù)

image_raw_data = tf.gfile.FastGFile("/path/to/picture", 'r').read()

with tf.Session() as sess:

# 對圖像進行jpeg的格式解碼從而得到圖像對應(yīng)的三維矩陣。tensorflow還提供了

# tf.image.decode_png 函數(shù)對png格式的圖像進行解碼。解碼之后的結(jié)果為一個

# 張量,在使用它的取值之前需要明確調(diào)用運行的過程。

img_data = tf.image.decode_jpeg(image_raw_data)

print img_data.eval()

# 輸出解碼之后的三維矩陣,上面這一行代碼將輸出以下內(nèi)容。

'''

[[[165 160 138]

...,

[105 140 50]

[[166 161 139]

...,

[106 139 48]]

...,

[207 200 181]

...,

[106 81 50]]]

'''# 使用pyplot工具可視化得到的圖像。

plt.imshow(img_data.eval())

plt.show()

# 將表示一張圖像的三維矩陣重新按照jpeg格式編碼并存入文件中。打開這張圖片,

# 可以得到和原始圖像一樣的圖像。

encoded_image = tf.image.encode_jpeg(img_data)

with tf.gfile.GFile("/path/to/output", "wb") as f:

f.write(encode_image.eval())

2、圖像大小調(diào)整

一般來說,網(wǎng)絡(luò)上獲取的圖像大小是不固定,但神經(jīng)網(wǎng)絡(luò)輸入節(jié)點的個數(shù)是固定的,所以在將圖像的像素作為輸入提供給神經(jīng)網(wǎng)路之前,需要先將圖像的大小統(tǒng)一。這就是圖像大小調(diào)整需要完成的任務(wù)。圖像大小調(diào)整有兩種方式,第一種是通過算法使得新的圖像盡量保存原始圖像上的所有信息。tensorflow提供了4種不同的方法,并且將它們封裝到了tf.image.resize_images函數(shù)。以下代碼示范了如何使用這個函數(shù)。# 加載原始圖像,定義會話等過程和圖像編碼處理中代碼一致,

# 假設(shè)img_data是已經(jīng)解碼的圖像。

# 首先將圖片數(shù)據(jù)轉(zhuǎn)化為實數(shù)類型。這一步將0-255的像素值轉(zhuǎn)化為 0.0-1.0 范圍內(nèi)的實數(shù),

# 大多數(shù)圖像處理API支持整數(shù)和實數(shù)類型的輸入,如果輸入是整數(shù)類型,這些API會

# 在內(nèi)部將輸入轉(zhuǎn)化為實數(shù)后處理,再將輸出轉(zhuǎn)化為整數(shù)。如果有多個處理步驟,在整數(shù)和

# 實數(shù)之間的反復轉(zhuǎn)化將導致精度損失,因此推進在圖像處理前將其轉(zhuǎn)化為實數(shù)類型。

# 下面的樣例子將略去這一步驟,假設(shè)img_data是經(jīng)過類型轉(zhuǎn)化的圖像

img_data = tf.image.convert_image_dtype(img_data, dtype=tf.float32)

# 通過tf.image.resize_images函數(shù)調(diào)整圖像的大小。這個函數(shù)第一個參數(shù)為原始圖像,

# 第二個和第三個參數(shù)為調(diào)整后圖像的大小,method參數(shù)給出了調(diào)整圖像大小的算法。

# 注意,如果輸入數(shù)據(jù)時unit8格式,那么輸出將是0-255內(nèi)的實數(shù),不方便后續(xù)處理。

resized = tf.image.resize_images(img_data, [300, 300], method=0)

# 通過pyplot可視化過程和圖像編碼處理中給出的代碼一致

下表給出了tf.image.resize_images函數(shù)的method參數(shù)取值對應(yīng)的圖像大小調(diào)整算法。

Method取值 ?? ?圖像大小調(diào)整算法0 ?? ?雙線性插值(Bilinear interpolation)

1 ?? ?最鄰近發(fā)(Nearest nighbor interpolation)

2 ?? ?雙三次插值(Bicubic interpolation)

3 ?? ?面積插值法(Area interpolation)

不同算法調(diào)整出來的結(jié)果會有細微差別,但不會相差太遠。除了將整張圖像信息完整保存,tensorflow還提供了API對圖像進行剪裁或者填充。以下代碼展示了通過tf.image.resize_image_with_crop_or_pad函數(shù)來調(diào)整圖像大小的功能。# 通過tf.image.resize_image_with_crop_or_pad函數(shù)調(diào)整圖像的大小。這個函數(shù)的

# 第一個參數(shù)為原始圖像,后面兩個參數(shù)是調(diào)整后的目標圖像大小。如果原始圖像的尺寸大于目標

# 圖像,那么這個函數(shù)會自動截取原始圖像中的部分。如果目標圖像

# 大于原始圖像,這個函數(shù)會自動在原始圖像的四周填充全0背景。因為原

# 始圖像的大小為1797*2673,所以下面的第一個命令會自動剪裁,而第二個命令會自動填充。

croped = tf.image.resize_image_crop_or_pad(img_data, 1000, 1000)

padded = tf.image.resize_image_crop_or_pad(img_data, 3000, 3000)

tensorflow還支持通過比例調(diào)整圖像大小,以下代碼給出了一個樣例:# 通過tf.image.central_crop函數(shù)可以按比例剪裁圖像。這個函數(shù)的第一個參數(shù)為原始圖

# 像,第二個為調(diào)整比例,這個比例需要時一個(0,1]的實數(shù)。

central_cropped = tf.image.central_crop(img_data, 0.5)

上面介紹的圖像剪切函數(shù)都是截取或者填充圖像中間的部分。tensorflow也提供了tf.image.crop_to_bounding_box函數(shù)和tf.image.pad_to_bounding_box函數(shù)來剪切或者填充給定區(qū)域的圖像。這兩個函數(shù)都要求給出的尺寸滿足一定的要求,否則程序會報錯。比如在使用tf.image.crop_to_bounding_box函數(shù)時,tensorflow要求提供的圖像尺寸要大于目標尺寸,也就是要求原始圖像能夠剪切目標圖像的大小。

3、圖像翻轉(zhuǎn)

tensorflow提供了一些函數(shù)來支持對圖像的翻轉(zhuǎn)。以下代碼實現(xiàn)了將圖像上下翻轉(zhuǎn)、左右翻轉(zhuǎn)以及沿對角線翻轉(zhuǎn)的功能。# 將圖像上下翻轉(zhuǎn)

flipped = tf.image.flip_up_down(img_data)

# 將圖像左右翻轉(zhuǎn)

flipped = tf.image.flip_left_right(img_data)

# 將圖像沿對角線

transposed = tf.image.transpose_image(img_data)

在很多圖像識別問題中,圖像的翻轉(zhuǎn)不應(yīng)該影響識別的結(jié)果。于是在訓練圖像識別的神經(jīng)網(wǎng)絡(luò)模型時,可以隨機地翻轉(zhuǎn)訓練圖像,這樣訓練得到的模型可以識別不同角度的實體。比如假設(shè)在訓練模型中所有的貓頭都是向右的,那么訓練出來的模型就無法很好地識別貓頭向左的貓。雖然這個問題可以通過收集更多的訓練數(shù)據(jù)來解決,但是通過隨機翻轉(zhuǎn)識別訓練圖像的方式可以在零成本的情況下很大程度地緩解該問題。所以隨機翻轉(zhuǎn)訓練圖像時一種很常用的圖像預(yù)處理方式。tensorflow提供了方便的API完成隨機圖像翻轉(zhuǎn)的過程。

# 以50%概率上下翻轉(zhuǎn)

??? flipped = tf.image.random_flip_up_down(img_data)

# 以50%概率左右翻轉(zhuǎn)圖像

??? flipped = tf.image.random_flip_left_right(img_data)

4、圖像色彩調(diào)整

和圖像翻轉(zhuǎn)類似,調(diào)整圖像的亮度、對比度、飽和度和色相在很多圖像識別應(yīng)用中都不會影響識別的結(jié)果。所以在訓練神經(jīng)網(wǎng)絡(luò)模型時,可以隨機調(diào)整訓練圖像的這些屬性,從而使得到的模型盡可能小地受到無關(guān)因素的影響。tensorflow提供了調(diào)整這些色彩相關(guān)屬性的API。以下代碼顯示了如何修改圖像的亮度。# 將圖像的亮度-0.5

adjusted = tf.image.adjust_brightness(img_data, -0.5)

# 色彩調(diào)整的API可能導致像素的實數(shù)超出0.0-1.0的范圍,因此在輸出最終圖像前需要

# 將其值截斷在0.0-1.0范圍區(qū)間,否則不僅圖像無法正??梢暬?#xff0c;以此為輸入的神經(jīng)網(wǎng)絡(luò)

# 的訓練質(zhì)量也可能受到影響。

# 如果對圖像進行多項處理操作,那么這一截斷過程應(yīng)在所有處理完成后進行。舉例而言,

# 假如對圖像進行多項處理操作,那么這一截斷過程應(yīng)當在所有處理完成后進行。舉例而言。

# 假如對圖像一次提高亮度和減少對比度,那么第二個操作可能將第一個操作生成的部分

# 過亮的像素回到不超過1.0的范圍內(nèi),因此在第一個操作后不應(yīng)該立即截斷。

# 下面的樣例假設(shè)截斷操作在最終可視化圖像前進行。

adjusted = tf.clip_by_value(adjusted, 0.0, 1.0)

# 將圖像的亮度+0.5

adjuested = tf.image.adjusted_brightness(img_data, 0.5)

# 在(-max_delta, max_delta)的范圍隨機調(diào)整圖像的亮度。

adjusted = tf.image.random_brightness(image, max_delta)

以下代碼顯示了如何調(diào)整圖像的對比度:# 將圖像的對比度減少到0.5倍

adjusted = tf.image.adjust_contrast(img_data, 0.5)

# 將圖像的對比度增加5倍

adjusted = tf.image.adjust_contrast(img_data, 5)

# 在[lower, upper]的范圍隨機調(diào)整圖的對比度

adjusted = tf.image.random_contrast(image, lower, upper)

以下代碼顯示了如何調(diào)整圖像的色相:# 下面4條命令分別將色相加0.1, 0.3, 0.6和0.9

adjusted = tf.image.adjust_hue(img_data, 0.1)

adjusted = tf.image.adjust_hue(img_data, 0.3)

adjusted = tf.image.adjust_hue(img_data, 0.6)

adjusted = tf.image.adjust_hue(img_data, 0.9)

# 在[-max_delta, max_delta]的范圍內(nèi)隨機調(diào)整圖像的色相。max_delta的取值在[0, 0.5]之間

adjusted = tf.image.random_hue(image, max_delta)

以下代碼顯示了如何調(diào)整圖像的飽和度:# 將圖像的飽和度-5

adjusted = tf.image.adjust_saturation(img_data, -5)

# 將圖像的飽和度+5

adjusted = tf.image.adjust_saturation(img_data, +5)

# 在[lower, upper]的范圍內(nèi)隨機調(diào)整圖像的飽和度

adjusted = tf.images.random_satutation(image, lower, upper)

除了調(diào)整圖像的亮度、對比度、飽和度和色相,tensorflow還提供API來完成圖像標準化的操作。這個操作就是將圖像上的亮度均值變?yōu)?,方差變?yōu)?.以下代碼實現(xiàn)了這個功能。# 將代表一張圖像的三維矩陣中的數(shù)字均值變?yōu)?,方差變?yōu)?

adjusted = tf.image.pet_standerdization(img_data)

5、處理框標準

在很多圖像識別任務(wù)的數(shù)據(jù)集中,圖像中需要關(guān)注的物體通常會被標注框圈出來。tensorflow提供了一些工具來處理標注框。以下代碼展示了如何通過tf.image.draw_bounding_boxes函數(shù)加入標注框。# 將圖像縮小一些,這樣可視化能讓標注框更加清楚。

img_data = tf.image.resize_images(img_data, [180, 26], method=1)

# tf.image.draw_bounding_boxes函數(shù)要求圖像矩陣中的數(shù)字為實數(shù),所以需要先將

# 圖像轉(zhuǎn)化為實數(shù)類型。tf.images.draw_bounding_boxes函數(shù)圖像的輸入是一個

# batch的數(shù)據(jù),也就是多張圖像組成的四維矩陣,所以需要將解碼之后的圖像矩陣加一維。

batched = tf.expand_dims(

tf.images.convert_image_dtype(img_data, tf.float32), 0)

# 給出每一張圖像的所有標注框。一個標注框有4個數(shù)字,分別代表[ymin, xmin, ymax, xmax]

# 注意這里給出的數(shù)字都是圖像的相對位置。比如在180*267的圖像中,

# [0.35, 0.47, 0.5, 0.56]代表了從(63, 125)到(90, 150)的圖像。

boxes = tf.constant([[[0.05, 0.05, 0.9, 0.7], [0.35, 0.47, 0.5, 0.56]]])

result = tf.image.draw_bounding_boxes(batched, boxes)

和隨機翻轉(zhuǎn)圖像、隨機調(diào)整顏色類似,隨機截取圖像上有信息含量的部分也是一個提高模型健壯性(robustness)的一種方式。這樣可以使訓練得到的模型不受被識別物體大小的影響。以下程序中展示了如何通過tf.image.sample_distored_bounding_box函數(shù)來完成截取圖像的過程。boxes = tf.constant([[[0.05, 0.05, 0.9, 0.7],[0.35, 0.47, 0.5, 0.56]]])

# 可以通過提供標注框的方式來告訴隨機截取圖像的算法哪些部分是“有信息量”的

# min_object_covered=0.4 表示截取部分至少包含某個標注框40%的內(nèi)容。

begin, size, bbox_for_draw = tf.image.sample_distorted_bounding_box(

tf.shape(img_data), bounding_boxes=boxes,

min_object_covered=0.4)

# 通過標注框可視化隨機截取得到的圖像。

batched = tf.expand_dims(tf.images.covert_image_dtype(img_data, tf.float32), 0)

image_with_box = tf.image.draw_bounding_boxes(batched, bbox_for_draw)

# 截取隨機出來的圖像。因為算法帶有隨機成分,所以

# 每次得到的結(jié)果會有所不同

distorted_image = tf.slice(img_data, begin, size)

6、圖像預(yù)處理完整例程

在解決真實的圖像識別問題時,一般同時使用多種處理方法。這節(jié)將給出一個完整的樣例程序展示如何將不同的圖像處理函數(shù)結(jié)合成一個完成了從圖像片段截取,到圖像大小調(diào)整再到圖像翻轉(zhuǎn)及色彩調(diào)整的整個圖像預(yù)處理過程。import tensorflow as tf

import numpy as np

from matplotlib import pyplot as plt

# 給定一張圖像,隨機調(diào)整圖像的色彩。因為調(diào)整亮度、對比度、飽和度和色相的順序會影

# 響最后得到的結(jié)果,所以可以定義多種不同的順序。具體使用哪一種順序可以在訓練

# 數(shù)據(jù)預(yù)處理時隨機地選擇一種。這樣可以進一步降低無關(guān)因素對模型的影響。

def distort_color(image, color_ordering=0):

if color_ordering == 0:

image = tf.image.random_brightness(image, max_delta=32. / 255.)

image = tf.image.random_saturation(image, lower=0.5, upper=1.5)

image = tf.image.random_hue(image, max_delta=0.2)

image = tf.image.random_contrast(image, lower=0.5, upper=1.5)

elif color_ordering == 1:

image = tf.image.random_saturation(image, lower=0.5, upper=1.5)

image = tf.image.random_brightness(image, max_delta=32. / 255.)

image = tf.image.random_contrast(image, lower=0.5, upper=1.5)

image = tf.image.random_hue(image, max_delta=0.2)

elif color_ordering == 2:

# 還可以定義其他的排列,但在這里就不再一一列出。

...

return tf.clip_by_value(image, 0.0, 1.0)

# 給定一張解碼后的圖像、目標圖像的尺寸以及圖像上的標注框,此函數(shù)可以對給出的圖像進行預(yù)

# 處理。這個函數(shù)的輸入圖像時圖像識別問題中原始的訓練圖像,而輸出則是神經(jīng)網(wǎng)絡(luò)模型的輸入

# 層。注意這里只處理模型的訓練數(shù)據(jù),對于預(yù)測的數(shù)據(jù),一般不需要隨機變換的步驟。

def preprocess_for_train(image, height, width, bbox):

# 如果沒有提供標注框,則認為整個圖像就是需要關(guān)注的部分。

if bbox is None:

bbox = tf.constant([0.0, 0.0, 1.0, 1.0], dtype=tf.float32, shape=[1, 1, 4])

# 轉(zhuǎn)換圖像張量的類型。

if image.dtype != tf.float32:

image = tf.image.convert_image_dtype(image, dtype=tf.float32)

# 隨機截取圖像,減少需要關(guān)注的物體大小對圖像識別算法的影響。

bbox_begin, bbox_size, _ = tf.image.sample_distorted_bounding_box(

tf.shape(image), bounding_boxes=bbox)

distorted_image = tf.slice(image, bbox_begin, bbox_size)

# 將隨機截取的圖像調(diào)整為神經(jīng)網(wǎng)絡(luò)輸入層的大小。大小調(diào)整的算法是隨機選擇的。

distorted_image = tf.image.resize_images(

distorted_image, [height, width], method=np.random.randint(2))

# 隨機左右翻轉(zhuǎn)圖像。

distorted_image = tf.image.random_flip_left_right(distorted_image)

# 使用一種隨機的順序調(diào)整圖像色彩。

distorted_image = distort_color(distorted_image, np.random.randint(2))

return distorted_image

image_raw_data = tf.gfile.FastGFile("timg.jpeg", "rb").read()

with tf.Session() as sess:

img_data = tf.image.decode_jpeg(image_raw_data)

boxes = tf.constant([[[0.05, 0.05, 0.9, 0.7], [0.35, 0.47, 0.5, 0.56]]])

# 運行6次獲得6種不同的圖像

for i in range(6):

# 將圖像的尺寸調(diào)整為299*299

result = preprocess_for_train(img_data, 299, 299, boxes)

plt.imshow(result.eval())

plt.show()

總結(jié)

以上是生活随笔為你收集整理的python的窗口处理模块_python的图像处理模块的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

麻豆国产97在线 | 欧洲 | 青青草原综合久久大伊人精品 | 初尝人妻少妇中文字幕 | 青草青草久热国产精品 | 牲欲强的熟妇农村老妇女视频 | 国内少妇偷人精品视频免费 | 在线播放亚洲第一字幕 | a片免费视频在线观看 | 久久久亚洲欧洲日产国码αv | 精品久久久久久亚洲精品 | 国产精品亚洲五月天高清 | 亚洲精品一区二区三区在线 | 亚洲精品国偷拍自产在线观看蜜桃 | 黑人粗大猛烈进出高潮视频 | 成人综合网亚洲伊人 | 色综合视频一区二区三区 | 国产精品人妻一区二区三区四 | 国产精品国产自线拍免费软件 | 内射老妇bbwx0c0ck | 波多野结衣高清一区二区三区 | 国产手机在线αⅴ片无码观看 | 无码av最新清无码专区吞精 | 久久无码专区国产精品s | 女人高潮内射99精品 | 小鲜肉自慰网站xnxx | 欧美熟妇另类久久久久久多毛 | 中文字幕日产无线码一区 | 日日麻批免费40分钟无码 | 妺妺窝人体色www婷婷 | 激情五月综合色婷婷一区二区 | 好男人www社区 | 亚洲色欲色欲欲www在线 | 一本久道高清无码视频 | 成在人线av无码免费 | 国产99久久精品一区二区 | 国产精品久久久久久无码 | 少妇人妻av毛片在线看 | 东京一本一道一二三区 | 伊人久久婷婷五月综合97色 | 人妻天天爽夜夜爽一区二区 | 蜜桃视频韩日免费播放 | 久久国产精品二国产精品 | 国产精品久久久久久亚洲影视内衣 | 亚洲最大成人网站 | 亚洲国产精品毛片av不卡在线 | 伊人久久婷婷五月综合97色 | 欧美日韩一区二区综合 | 国产av无码专区亚洲a∨毛片 | 欧美高清在线精品一区 | 亚洲欧美国产精品久久 | 麻豆国产97在线 | 欧洲 | 亚洲国产av精品一区二区蜜芽 | 中文字幕无码日韩专区 | 999久久久国产精品消防器材 | 亚洲色无码一区二区三区 | 久久这里只有精品视频9 | 性做久久久久久久久 | 欧美阿v高清资源不卡在线播放 | 国产两女互慰高潮视频在线观看 | 少妇无码av无码专区在线观看 | 中文字幕色婷婷在线视频 | 日本丰满护士爆乳xxxx | 未满小14洗澡无码视频网站 | 高清不卡一区二区三区 | 一本色道久久综合亚洲精品不卡 | 黑人粗大猛烈进出高潮视频 | 国内精品久久毛片一区二区 | 国产午夜精品一区二区三区嫩草 | 最新版天堂资源中文官网 | 亚洲国产精品久久久天堂 | 男人和女人高潮免费网站 | 精品一二三区久久aaa片 | 久久天天躁狠狠躁夜夜免费观看 | 少妇的肉体aa片免费 | 亚洲综合在线一区二区三区 | 色综合久久久久综合一本到桃花网 | 一本大道伊人av久久综合 | 亚洲精品午夜国产va久久成人 | 日产精品高潮呻吟av久久 | 亚洲一区二区三区含羞草 | 国产亚洲欧美在线专区 | 久久99精品久久久久久动态图 | 日日麻批免费40分钟无码 | 久久综合网欧美色妞网 | 国产亚洲精品久久久久久国模美 | 欧美黑人性暴力猛交喷水 | 国产精品久久久久7777 | 377p欧洲日本亚洲大胆 | 麻豆国产丝袜白领秘书在线观看 | 美女黄网站人色视频免费国产 | 乱码午夜-极国产极内射 | 88国产精品欧美一区二区三区 | 天海翼激烈高潮到腰振不止 | 国产精品久久久久久无码 | 国产精品自产拍在线观看 | 国产免费久久精品国产传媒 | 欧美丰满熟妇xxxx性ppx人交 | 一本色道久久综合亚洲精品不卡 | 日本护士xxxxhd少妇 | 中文字幕av日韩精品一区二区 | 国产精品久久久久久久9999 | 亚洲一区二区三区偷拍女厕 | 日韩精品一区二区av在线 | 国产精品va在线观看无码 | 成人无码精品1区2区3区免费看 | 亚洲va欧美va天堂v国产综合 | 精品偷拍一区二区三区在线看 | 国产成人精品无码播放 | 狠狠噜狠狠狠狠丁香五月 | 男人的天堂av网站 | 高潮毛片无遮挡高清免费 | 大胆欧美熟妇xx | 大屁股大乳丰满人妻 | 国产精品爱久久久久久久 | 少妇无码一区二区二三区 | 在线看片无码永久免费视频 | 天天爽夜夜爽夜夜爽 | 丰满护士巨好爽好大乳 | 国产热a欧美热a在线视频 | 粉嫩少妇内射浓精videos | 精品国产精品久久一区免费式 | 粉嫩少妇内射浓精videos | 中文字幕人成乱码熟女app | 精品水蜜桃久久久久久久 | 亚洲精品鲁一鲁一区二区三区 | 亚洲精品鲁一鲁一区二区三区 | 亚洲综合在线一区二区三区 | 亚洲成a人一区二区三区 | 中文字幕人妻无码一区二区三区 | 伊人久久大香线焦av综合影院 | 亚洲欧美国产精品久久 | 婷婷丁香六月激情综合啪 | 国产熟妇另类久久久久 | 国产精品美女久久久网av | 俺去俺来也在线www色官网 | 一区二区三区乱码在线 | 欧洲 | 国产精品怡红院永久免费 | 国产一区二区三区影院 | 欧美老人巨大xxxx做受 | 四虎影视成人永久免费观看视频 | 天天躁日日躁狠狠躁免费麻豆 | 精品无码成人片一区二区98 | 成人无码精品1区2区3区免费看 | 国产精品亚洲综合色区韩国 | 未满小14洗澡无码视频网站 | 国产精品美女久久久 | 狠狠噜狠狠狠狠丁香五月 | 学生妹亚洲一区二区 | 亚洲色在线无码国产精品不卡 | 欧美精品无码一区二区三区 | 欧美精品国产综合久久 | 日韩在线不卡免费视频一区 | 无码av中文字幕免费放 | 99久久人妻精品免费一区 | 人妻体内射精一区二区三四 | 国产亚洲精品久久久久久 | 强辱丰满人妻hd中文字幕 | 婷婷综合久久中文字幕蜜桃三电影 | 国产手机在线αⅴ片无码观看 | 欧美亚洲日韩国产人成在线播放 | 国产亚洲精品久久久久久国模美 | 国产香蕉尹人视频在线 | 亚洲成a人一区二区三区 | 国产亚洲人成a在线v网站 | 玩弄少妇高潮ⅹxxxyw | 天天躁夜夜躁狠狠是什么心态 | 亚洲精品国偷拍自产在线观看蜜桃 | 亚洲成a人一区二区三区 | 无码人妻精品一区二区三区不卡 | 强辱丰满人妻hd中文字幕 | 欧美午夜特黄aaaaaa片 | 性生交片免费无码看人 | 国产精品a成v人在线播放 | 欧美xxxx黑人又粗又长 | 国产网红无码精品视频 | 一本久久a久久精品亚洲 | 欧美日本精品一区二区三区 | 国产精品无码永久免费888 | 欧美老熟妇乱xxxxx | 午夜熟女插插xx免费视频 | 中文字幕人妻无码一区二区三区 | 99久久人妻精品免费一区 | 在线亚洲高清揄拍自拍一品区 | 少妇的肉体aa片免费 | 好爽又高潮了毛片免费下载 | 亚洲成a人片在线观看日本 | 亚洲无人区午夜福利码高清完整版 | 欧美黑人乱大交 | 亚洲国产欧美日韩精品一区二区三区 | 国产精品鲁鲁鲁 | 亚洲熟妇色xxxxx欧美老妇 | 人妻无码αv中文字幕久久琪琪布 | 久久综合色之久久综合 | 国产午夜亚洲精品不卡 | 国产美女极度色诱视频www | 欧美日韩人成综合在线播放 | 俄罗斯老熟妇色xxxx | 九月婷婷人人澡人人添人人爽 | 乱人伦人妻中文字幕无码久久网 | 成年美女黄网站色大免费全看 | 久久久精品成人免费观看 | 国产高清av在线播放 | 亚洲成av人影院在线观看 | 超碰97人人射妻 | 天堂无码人妻精品一区二区三区 | 色综合久久久久综合一本到桃花网 | 男女超爽视频免费播放 | 99久久精品国产一区二区蜜芽 | 日韩欧美中文字幕在线三区 | 性做久久久久久久久 | 亚洲国产午夜精品理论片 | 国产精品丝袜黑色高跟鞋 | 成人精品视频一区二区三区尤物 | 国产成人无码一二三区视频 | 亚洲人成网站在线播放942 | 欧美成人免费全部网站 | 国内精品人妻无码久久久影院蜜桃 | 日本肉体xxxx裸交 | 亚洲性无码av中文字幕 | 青青青爽视频在线观看 | 中文字幕无码av激情不卡 | 国产乱人无码伦av在线a | 亚洲高清偷拍一区二区三区 | 国产美女精品一区二区三区 | 国产精品国产三级国产专播 | 在线 国产 欧美 亚洲 天堂 | 亚洲成av人在线观看网址 | 亚洲娇小与黑人巨大交 | 狂野欧美性猛xxxx乱大交 | 日本熟妇大屁股人妻 | 亚洲一区av无码专区在线观看 | 日韩精品无码一区二区中文字幕 | 亚洲の无码国产の无码步美 | 免费观看又污又黄的网站 | 国产精华av午夜在线观看 | 国产精品福利视频导航 | 成人性做爰aaa片免费看 | 成人影院yy111111在线观看 | 免费人成网站视频在线观看 | 亚洲色www成人永久网址 | 精品水蜜桃久久久久久久 | 美女毛片一区二区三区四区 | 午夜精品久久久内射近拍高清 | 男人扒开女人内裤强吻桶进去 | 成熟女人特级毛片www免费 | 国产午夜无码精品免费看 | 国产熟女一区二区三区四区五区 | 国产精品久久国产精品99 | 久久国产精品_国产精品 | 岛国片人妻三上悠亚 | 丰满少妇熟乱xxxxx视频 | 亚洲精品国产精品乱码不卡 | 国产亚洲人成a在线v网站 | 国产亚洲美女精品久久久2020 | 日本在线高清不卡免费播放 | 亚洲日韩av片在线观看 | 麻豆人妻少妇精品无码专区 | 国产亚洲tv在线观看 | 午夜精品久久久内射近拍高清 | 国产成人久久精品流白浆 | 国产精品办公室沙发 | 六十路熟妇乱子伦 | 色五月五月丁香亚洲综合网 | 久久精品中文闷骚内射 | 亚洲中文字幕va福利 | 久久精品成人欧美大片 | 日韩精品乱码av一区二区 | 国产成人无码专区 | 亚洲人成影院在线无码按摩店 | 色诱久久久久综合网ywww | 55夜色66夜色国产精品视频 | 奇米影视7777久久精品人人爽 | 未满成年国产在线观看 | 国产成人精品视频ⅴa片软件竹菊 | 亚洲精品久久久久avwww潮水 | 99久久久国产精品无码免费 | 亚洲乱亚洲乱妇50p | 色综合久久网 | 99在线 | 亚洲 | 黄网在线观看免费网站 | 精品国产福利一区二区 | 欧美日本免费一区二区三区 | 正在播放东北夫妻内射 | www国产精品内射老师 | 永久免费精品精品永久-夜色 | 色综合久久久久综合一本到桃花网 | 少妇性荡欲午夜性开放视频剧场 | 啦啦啦www在线观看免费视频 | 乱码午夜-极国产极内射 | 国产一精品一av一免费 | 久久久精品人妻久久影视 | 国产乱子伦视频在线播放 | 国产成人无码区免费内射一片色欲 | 欧美日韩人成综合在线播放 | 国产真实乱对白精彩久久 | 无套内射视频囯产 | 女人被男人躁得好爽免费视频 | 亚洲综合精品香蕉久久网 | 夜夜躁日日躁狠狠久久av | 国内揄拍国内精品人妻 | 亚洲中文字幕久久无码 | 大乳丰满人妻中文字幕日本 | 精品国产乱码久久久久乱码 | 日韩 欧美 动漫 国产 制服 | 国产亚洲精品久久久久久大师 | 亚洲精品鲁一鲁一区二区三区 | 日韩人妻无码一区二区三区久久99 | 免费男性肉肉影院 | 亚洲国产精品久久久久久 | www国产精品内射老师 | 娇妻被黑人粗大高潮白浆 | 久久久精品人妻久久影视 | 六十路熟妇乱子伦 | 成 人影片 免费观看 | 玩弄少妇高潮ⅹxxxyw | 伊人久久大香线蕉av一区二区 | 亚洲精品鲁一鲁一区二区三区 | 欧美日韩视频无码一区二区三 | 色综合久久久无码中文字幕 | 国产无遮挡又黄又爽又色 | 亚洲成a人片在线观看无码3d | 特黄特色大片免费播放器图片 | 日本精品少妇一区二区三区 | 大肉大捧一进一出好爽视频 | 亚洲熟妇色xxxxx亚洲 | 精品午夜福利在线观看 | 老熟妇乱子伦牲交视频 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 一本一道久久综合久久 | 狂野欧美激情性xxxx | 色欲综合久久中文字幕网 | 成人亚洲精品久久久久 | 精品少妇爆乳无码av无码专区 | 宝宝好涨水快流出来免费视频 | 色五月丁香五月综合五月 | 国产成人无码a区在线观看视频app | 国产精品第一国产精品 | 亚洲精品久久久久久久久久久 | 国产一区二区不卡老阿姨 | 色一情一乱一伦 | 色爱情人网站 | 亚洲人成无码网www | 日日鲁鲁鲁夜夜爽爽狠狠 | 最新国产乱人伦偷精品免费网站 | 久久久久亚洲精品男人的天堂 | 久久午夜无码鲁丝片秋霞 | 日本爽爽爽爽爽爽在线观看免 | 国产内射爽爽大片视频社区在线 | 国产精品无码一区二区桃花视频 | 无码国模国产在线观看 | 风流少妇按摩来高潮 | 熟女体下毛毛黑森林 | 国产精品久久久久影院嫩草 | 国产精品久久久久久亚洲毛片 | 女人色极品影院 | 丰满妇女强制高潮18xxxx | ass日本丰满熟妇pics | 又粗又大又硬毛片免费看 | 中文字幕无码av激情不卡 | 欧美日本免费一区二区三区 | 久久国产精品萌白酱免费 | 300部国产真实乱 | 国产精品久久国产精品99 | 亚洲欧美日韩成人高清在线一区 | 日韩欧美成人免费观看 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 四虎国产精品一区二区 | 亚洲 a v无 码免 费 成 人 a v | 5858s亚洲色大成网站www | 亚洲日韩乱码中文无码蜜桃臀网站 | 亚洲精品久久久久久一区二区 | аⅴ资源天堂资源库在线 | 亚洲日韩一区二区三区 | 国产精品美女久久久久av爽李琼 | 麻豆md0077饥渴少妇 | 国产激情无码一区二区 | 一本加勒比波多野结衣 | 国产综合色产在线精品 | 一二三四在线观看免费视频 | 精品久久久久久亚洲精品 | 亚洲日韩av一区二区三区中文 | 狠狠色欧美亚洲狠狠色www | 国产激情艳情在线看视频 | 国产精品亚洲综合色区韩国 | 人人妻人人藻人人爽欧美一区 | 日欧一片内射va在线影院 | 老熟妇乱子伦牲交视频 | 精品无码国产自产拍在线观看蜜 | 欧美日韩视频无码一区二区三 | 4hu四虎永久在线观看 | 偷窥村妇洗澡毛毛多 | 国产日产欧产精品精品app | 四十如虎的丰满熟妇啪啪 | 中文字幕无码av波多野吉衣 | 国产成人无码专区 | 国产精品美女久久久久av爽李琼 | 久久97精品久久久久久久不卡 | 日本在线高清不卡免费播放 | 野狼第一精品社区 | 夜精品a片一区二区三区无码白浆 | 日韩精品成人一区二区三区 | 亚洲精品午夜国产va久久成人 | 亚洲无人区午夜福利码高清完整版 | 成人性做爰aaa片免费看 | 天天摸天天碰天天添 | 色婷婷综合激情综在线播放 | 2019午夜福利不卡片在线 | 无码帝国www无码专区色综合 | 沈阳熟女露脸对白视频 | 国产黑色丝袜在线播放 | 1000部夫妻午夜免费 | 亚洲国产精品无码久久久久高潮 | 国产欧美精品一区二区三区 | 中文字幕无码人妻少妇免费 | 亚洲天堂2017无码中文 | 国产另类ts人妖一区二区 | 国产免费无码一区二区视频 | 午夜性刺激在线视频免费 | 色欲综合久久中文字幕网 | 日韩人妻少妇一区二区三区 | 久久伊人色av天堂九九小黄鸭 | 亚洲国产成人a精品不卡在线 | 午夜成人1000部免费视频 | 日韩av无码一区二区三区不卡 | 无码人妻丰满熟妇区五十路百度 | 骚片av蜜桃精品一区 | 人妻有码中文字幕在线 | 老熟女重囗味hdxx69 | 日韩人妻少妇一区二区三区 | 1000部啪啪未满十八勿入下载 | 日韩av无码中文无码电影 | 国产午夜手机精彩视频 | 国产9 9在线 | 中文 | 粉嫩少妇内射浓精videos | 国产精品多人p群无码 | 中文字幕乱妇无码av在线 | 波多野结衣乳巨码无在线观看 | 中国女人内谢69xxxxxa片 | 亚洲伊人久久精品影院 | 欧美三级不卡在线观看 | 国产99久久精品一区二区 | 国产无遮挡吃胸膜奶免费看 | 国产三级精品三级男人的天堂 | 亚洲一区二区三区含羞草 | 人妻aⅴ无码一区二区三区 | 久久久久99精品成人片 | 亚洲成色www久久网站 | 女人和拘做爰正片视频 | 自拍偷自拍亚洲精品10p | 亚洲狠狠色丁香婷婷综合 | 樱花草在线播放免费中文 | 精品国产一区二区三区四区在线看 | 熟妇人妻无码xxx视频 | 精品欧美一区二区三区久久久 | 日韩精品无码免费一区二区三区 | 久久99久久99精品中文字幕 | 国产精品怡红院永久免费 | 久久久成人毛片无码 | 天天拍夜夜添久久精品 | 午夜福利不卡在线视频 | 国产农村乱对白刺激视频 | 思思久久99热只有频精品66 | 欧美日韩一区二区免费视频 | 思思久久99热只有频精品66 | 亚洲熟熟妇xxxx | 老太婆性杂交欧美肥老太 | 奇米影视7777久久精品人人爽 | 国产亚洲精品久久久久久大师 | 一二三四在线观看免费视频 | 国产凸凹视频一区二区 | 伊人久久婷婷五月综合97色 | 激情五月综合色婷婷一区二区 | 亚洲精品国产a久久久久久 | 中文字幕人妻无码一区二区三区 | 天天av天天av天天透 | 少妇人妻大乳在线视频 | 国产精华av午夜在线观看 | 久久亚洲精品中文字幕无男同 | 久久国产自偷自偷免费一区调 | 奇米影视7777久久精品人人爽 | 激情爆乳一区二区三区 | 欧美怡红院免费全部视频 | 牲交欧美兽交欧美 | 国产激情一区二区三区 | 精品久久久中文字幕人妻 | 国产另类ts人妖一区二区 | 午夜丰满少妇性开放视频 | 婷婷六月久久综合丁香 | 国产av一区二区精品久久凹凸 | 亚洲欧洲日本无在线码 | 伊人色综合久久天天小片 | 国产精品高潮呻吟av久久 | 欧美真人作爱免费视频 | 精品国偷自产在线视频 | 在线 国产 欧美 亚洲 天堂 | 成 人 网 站国产免费观看 | 国产精品久免费的黄网站 | 大地资源网第二页免费观看 | 7777奇米四色成人眼影 | 999久久久国产精品消防器材 | 免费网站看v片在线18禁无码 | 国内揄拍国内精品少妇国语 | 久久精品视频在线看15 | 欧美老妇交乱视频在线观看 | 日本精品人妻无码免费大全 | 亚洲综合无码一区二区三区 | 偷窥村妇洗澡毛毛多 | 国产精品久久国产三级国 | av无码不卡在线观看免费 | 又湿又紧又大又爽a视频国产 | 在线播放无码字幕亚洲 | 日本熟妇浓毛 | 亚洲一区二区三区偷拍女厕 | 国产精品久久久久影院嫩草 | 少女韩国电视剧在线观看完整 | 永久黄网站色视频免费直播 | av在线亚洲欧洲日产一区二区 | 老司机亚洲精品影院 | 中文字幕av伊人av无码av | 任你躁国产自任一区二区三区 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 国产av一区二区精品久久凹凸 | 国产无套内射久久久国产 | 成人aaa片一区国产精品 | 超碰97人人射妻 | 特黄特色大片免费播放器图片 | 野狼第一精品社区 | 真人与拘做受免费视频一 | 捆绑白丝粉色jk震动捧喷白浆 | 亚洲精品中文字幕久久久久 | 国产亚洲美女精品久久久2020 | 亚洲の无码国产の无码影院 | 亚洲s色大片在线观看 | 丰满人妻精品国产99aⅴ | 亚洲第一无码av无码专区 | 欧美freesex黑人又粗又大 | 国产女主播喷水视频在线观看 | 无码人妻黑人中文字幕 | 精品成在人线av无码免费看 | 俺去俺来也www色官网 | 台湾无码一区二区 | 日本一区二区三区免费高清 | 国产精品亚洲lv粉色 | 国产亚洲精品久久久久久国模美 | 色爱情人网站 | 午夜嘿嘿嘿影院 | 日本肉体xxxx裸交 | 蜜臀aⅴ国产精品久久久国产老师 | 97夜夜澡人人双人人人喊 | 好男人社区资源 | 永久免费观看美女裸体的网站 | 性欧美大战久久久久久久 | 特大黑人娇小亚洲女 | 久久精品99久久香蕉国产色戒 | 亚洲精品成a人在线观看 | 又大又硬又爽免费视频 | 亚洲一区二区三区在线观看网站 | 欧美激情内射喷水高潮 | 国产熟妇另类久久久久 | 午夜成人1000部免费视频 | 亚洲国产精品久久人人爱 | 国产艳妇av在线观看果冻传媒 | 亚洲欧美精品aaaaaa片 | 色窝窝无码一区二区三区色欲 | 精品国产aⅴ无码一区二区 | 牲交欧美兽交欧美 | 亚洲啪av永久无码精品放毛片 | 欧美 丝袜 自拍 制服 另类 | 国产精品永久免费视频 | 十八禁真人啪啪免费网站 | 中文字幕中文有码在线 | 性欧美熟妇videofreesex | 午夜精品一区二区三区的区别 | 欧美日韩视频无码一区二区三 | 性欧美牲交在线视频 | 免费视频欧美无人区码 | 久久人人97超碰a片精品 | 久久久久se色偷偷亚洲精品av | a片免费视频在线观看 | 97se亚洲精品一区 | 国产一区二区三区日韩精品 | 亚洲 日韩 欧美 成人 在线观看 | 曰韩无码二三区中文字幕 | 在线播放无码字幕亚洲 | 18禁止看的免费污网站 | 亚洲の无码国产の无码步美 | 亚洲男女内射在线播放 | 亚洲一区二区三区 | 欧美成人家庭影院 | 两性色午夜免费视频 | 国产无遮挡又黄又爽免费视频 | 又粗又大又硬毛片免费看 | 国产国产精品人在线视 | 亚洲乱亚洲乱妇50p | 真人与拘做受免费视频一 | 欧美成人午夜精品久久久 | 国产在热线精品视频 | 精品偷拍一区二区三区在线看 | 精品国精品国产自在久国产87 | 亚洲日韩av一区二区三区四区 | 欧美高清在线精品一区 | 日韩精品无码一区二区中文字幕 | 国产偷抇久久精品a片69 | 国产suv精品一区二区五 | 日日鲁鲁鲁夜夜爽爽狠狠 | 久久午夜夜伦鲁鲁片无码免费 | 大屁股大乳丰满人妻 | 亚洲一区二区三区偷拍女厕 | 乱人伦中文视频在线观看 | 日韩欧美群交p片內射中文 | 国产成人无码a区在线观看视频app | 少妇人妻av毛片在线看 | 精品无码国产一区二区三区av | 樱花草在线社区www | 双乳奶水饱满少妇呻吟 | 国产成人精品三级麻豆 | 亚洲国产精品无码一区二区三区 | 人人妻人人澡人人爽人人精品浪潮 | 亚洲一区二区三区国产精华液 | www国产亚洲精品久久久日本 | 青青青手机频在线观看 | 亚洲精品一区二区三区四区五区 | 亚洲精品中文字幕乱码 | 国产精品多人p群无码 | 亚洲爆乳无码专区 | 国产乱人无码伦av在线a | 中文字幕亚洲情99在线 | 亚洲精品午夜国产va久久成人 | 一本色道久久综合亚洲精品不卡 | 天海翼激烈高潮到腰振不止 | 国产乱人伦偷精品视频 | 久久99久久99精品中文字幕 | 亚洲欧美综合区丁香五月小说 | 久久视频在线观看精品 | 国产香蕉97碰碰久久人人 | 亚洲国产av美女网站 | 又大又硬又爽免费视频 | 国模大胆一区二区三区 | 久久综合给久久狠狠97色 | 国产一区二区三区日韩精品 | 少女韩国电视剧在线观看完整 | 蜜桃无码一区二区三区 | 无码人妻丰满熟妇区毛片18 | 午夜无码人妻av大片色欲 | 国产无遮挡又黄又爽又色 | 天天爽夜夜爽夜夜爽 | 少妇人妻av毛片在线看 | 欧美精品在线观看 | 99久久人妻精品免费一区 | 东京热无码av男人的天堂 | 国产午夜手机精彩视频 | а√天堂www在线天堂小说 | 又大又硬又黄的免费视频 | 欧美日本免费一区二区三区 | 国产亚洲精品久久久久久久 | 欧美 日韩 人妻 高清 中文 | 国产精品美女久久久网av | 丰满护士巨好爽好大乳 | 日本一卡2卡3卡四卡精品网站 | 成人精品天堂一区二区三区 | 强辱丰满人妻hd中文字幕 | 性色欲情网站iwww九文堂 | 国产亚洲精品久久久ai换 | 1000部夫妻午夜免费 | 午夜性刺激在线视频免费 | 成人免费视频视频在线观看 免费 | 99久久精品日本一区二区免费 | 人妻中文无码久热丝袜 | 国内精品人妻无码久久久影院蜜桃 | 无码av岛国片在线播放 | 免费无码肉片在线观看 | 无码精品人妻一区二区三区av | 国产成人精品久久亚洲高清不卡 | 国产精品.xx视频.xxtv | 欧美熟妇另类久久久久久多毛 | 久久精品无码一区二区三区 | 18禁黄网站男男禁片免费观看 | 亚洲一区二区三区播放 | 一区二区三区乱码在线 | 欧洲 | 永久免费观看美女裸体的网站 | 亚洲 a v无 码免 费 成 人 a v | 久久久精品人妻久久影视 | 久久zyz资源站无码中文动漫 | 中文字幕人成乱码熟女app | 久久成人a毛片免费观看网站 | 国产精品久久久av久久久 | 狂野欧美性猛xxxx乱大交 | 久久aⅴ免费观看 | 亚洲一区二区三区含羞草 | 动漫av一区二区在线观看 | 免费男性肉肉影院 | 狠狠cao日日穞夜夜穞av | 无码一区二区三区在线观看 | 一区二区传媒有限公司 | 成人免费无码大片a毛片 | 久久久久久久女国产乱让韩 | 午夜嘿嘿嘿影院 | 特黄特色大片免费播放器图片 | www国产亚洲精品久久网站 | 乱人伦人妻中文字幕无码 | 色婷婷av一区二区三区之红樱桃 | 国产做国产爱免费视频 | 日本免费一区二区三区最新 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 一区二区传媒有限公司 | 精品人妻中文字幕有码在线 | 亚洲成av人影院在线观看 | 成年美女黄网站色大免费视频 | 国产高清不卡无码视频 | 18禁黄网站男男禁片免费观看 | 狠狠色欧美亚洲狠狠色www | 大乳丰满人妻中文字幕日本 | 亚洲午夜福利在线观看 | 亚洲自偷自偷在线制服 | 永久免费观看美女裸体的网站 | aⅴ亚洲 日韩 色 图网站 播放 | 久久伊人色av天堂九九小黄鸭 | 99久久久国产精品无码免费 | 国产两女互慰高潮视频在线观看 | √8天堂资源地址中文在线 | 夫妻免费无码v看片 | 国产国产精品人在线视 | 亚洲小说春色综合另类 | 女人高潮内射99精品 | 久久国语露脸国产精品电影 | 国产偷自视频区视频 | 一本久道久久综合婷婷五月 | 麻豆国产人妻欲求不满谁演的 | 欧美日本日韩 | 人妻少妇精品无码专区动漫 | 丰满人妻一区二区三区免费视频 | 亚洲色欲色欲欲www在线 | 牲欲强的熟妇农村老妇女视频 | 久久99精品久久久久久动态图 | 亚洲乱码中文字幕在线 | 欧美肥老太牲交大战 | 最新国产麻豆aⅴ精品无码 | 精品欧洲av无码一区二区三区 | 十八禁真人啪啪免费网站 | 亚洲日韩av一区二区三区四区 | 麻豆md0077饥渴少妇 | 人妻尝试又大又粗久久 | 99精品无人区乱码1区2区3区 | 欧美日韩综合一区二区三区 | 色欲久久久天天天综合网精品 | 人妻熟女一区 | 在线精品亚洲一区二区 | 亚洲の无码国产の无码步美 | 国产午夜无码视频在线观看 | 天天燥日日燥 | 大肉大捧一进一出视频出来呀 | 日韩视频 中文字幕 视频一区 | 国产农村妇女高潮大叫 | 人妻少妇精品无码专区二区 | 伊人久久大香线焦av综合影院 | 婷婷五月综合缴情在线视频 | 全球成人中文在线 | 亚洲高清偷拍一区二区三区 | 扒开双腿吃奶呻吟做受视频 | 亚洲精品久久久久久久久久久 | 99久久无码一区人妻 | 久久97精品久久久久久久不卡 | 成人欧美一区二区三区黑人 | 高潮毛片无遮挡高清免费视频 | 99精品视频在线观看免费 | 成在人线av无码免观看麻豆 | 亚洲成a人片在线观看无码3d | 少妇厨房愉情理9仑片视频 | 特级做a爰片毛片免费69 | 国内少妇偷人精品视频 | 国产人妻精品午夜福利免费 | 又湿又紧又大又爽a视频国产 | 欧美精品无码一区二区三区 | 久久久精品人妻久久影视 | 色欲人妻aaaaaaa无码 | 国产精华av午夜在线观看 | 日本熟妇人妻xxxxx人hd | 亚洲精品成人av在线 | 久久久久久国产精品无码下载 | 国内揄拍国内精品少妇国语 | 国产免费久久久久久无码 | 国语精品一区二区三区 | 无码av中文字幕免费放 | 精品久久久中文字幕人妻 | 一个人看的视频www在线 | 综合人妻久久一区二区精品 | 乱中年女人伦av三区 | 精品无码一区二区三区的天堂 | 夜先锋av资源网站 | 国产人妖乱国产精品人妖 | 午夜丰满少妇性开放视频 | 精品无人国产偷自产在线 | 牲欲强的熟妇农村老妇女 | 成人影院yy111111在线观看 | 欧美日韩色另类综合 | 久久久久99精品成人片 | 老熟妇仑乱视频一区二区 | 久久成人a毛片免费观看网站 | 亚洲精品午夜国产va久久成人 | 国产熟妇高潮叫床视频播放 | 国产婷婷色一区二区三区在线 | 黑人大群体交免费视频 | 欧美人与牲动交xxxx | 国产一精品一av一免费 | 男人的天堂2018无码 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 激情亚洲一区国产精品 | 少妇被黑人到高潮喷出白浆 | 国产亚洲精品久久久久久久久动漫 | 久久天天躁夜夜躁狠狠 | 亚洲成色www久久网站 | 国产va免费精品观看 | 中文字幕无码乱人伦 | 中文字幕中文有码在线 | 丰满人妻被黑人猛烈进入 | av香港经典三级级 在线 | 国产精品久久久av久久久 | 国产无套内射久久久国产 | 国产特级毛片aaaaaaa高清 | 无码免费一区二区三区 | 精品成人av一区二区三区 | 亚洲高清偷拍一区二区三区 | 少妇人妻偷人精品无码视频 | 色婷婷久久一区二区三区麻豆 | 国产在线无码精品电影网 | 在线观看国产一区二区三区 | 国产亲子乱弄免费视频 | 欧美自拍另类欧美综合图片区 | 亚洲成av人综合在线观看 | 久久久精品成人免费观看 | 亲嘴扒胸摸屁股激烈网站 | 久久精品视频在线看15 | 亚洲色偷偷男人的天堂 | 激情爆乳一区二区三区 | 日本免费一区二区三区最新 | 欧美人妻一区二区三区 | 51国偷自产一区二区三区 | 国产一区二区三区精品视频 | 日本又色又爽又黄的a片18禁 | 亚洲精品综合一区二区三区在线 | 国产绳艺sm调教室论坛 | 日韩亚洲欧美精品综合 | 成人无码视频免费播放 | 成 人 免费观看网站 | 亚洲天堂2017无码 | 中文字幕无码热在线视频 | 亚洲色在线无码国产精品不卡 | 国产av一区二区三区最新精品 | 亚洲一区二区三区偷拍女厕 | 欧美一区二区三区 | 国产免费久久久久久无码 | 亚洲精品一区三区三区在线观看 | 欧洲熟妇色 欧美 | 国产精品无码永久免费888 | 天天躁夜夜躁狠狠是什么心态 | 亚洲狠狠婷婷综合久久 | 99久久婷婷国产综合精品青草免费 | 亚洲精品国偷拍自产在线观看蜜桃 | 在线天堂新版最新版在线8 | 国产色视频一区二区三区 | 亚洲精品久久久久avwww潮水 | 爽爽影院免费观看 | 牲欲强的熟妇农村老妇女 | 无套内谢的新婚少妇国语播放 | 国产欧美熟妇另类久久久 | 国产亚洲日韩欧美另类第八页 | 国产成人精品必看 | 天天av天天av天天透 | 麻花豆传媒剧国产免费mv在线 | 日产精品高潮呻吟av久久 | 日韩精品一区二区av在线 | 久久精品人妻少妇一区二区三区 | 131美女爱做视频 | 正在播放老肥熟妇露脸 | 熟妇人妻中文av无码 | 野外少妇愉情中文字幕 | 精品一区二区三区无码免费视频 | 亚洲天堂2017无码中文 | a在线亚洲男人的天堂 | 久久久中文字幕日本无吗 | 中文无码精品a∨在线观看不卡 | 激情内射亚州一区二区三区爱妻 | 天天躁日日躁狠狠躁免费麻豆 | 2020久久超碰国产精品最新 | 图片小说视频一区二区 | 沈阳熟女露脸对白视频 | 亚洲综合色区中文字幕 | 免费人成网站视频在线观看 | 亚洲成av人片在线观看无码不卡 | 久久国产精品二国产精品 | 日韩av无码中文无码电影 | 人人妻人人藻人人爽欧美一区 | 捆绑白丝粉色jk震动捧喷白浆 | 99久久久无码国产aaa精品 | 高潮喷水的毛片 | 无码人妻精品一区二区三区不卡 | 婷婷六月久久综合丁香 | 大肉大捧一进一出视频出来呀 | 久久综合狠狠综合久久综合88 | 桃花色综合影院 | 国产人成高清在线视频99最全资源 | 日本一区二区更新不卡 | 奇米影视7777久久精品 | 亚洲精品一区二区三区四区五区 | 亚洲人亚洲人成电影网站色 | 欧美野外疯狂做受xxxx高潮 | 欧美激情一区二区三区成人 | 亚洲s色大片在线观看 | 亚洲一区二区三区在线观看网站 | 日本精品人妻无码77777 天堂一区人妻无码 | 亚洲热妇无码av在线播放 | 久久99热只有频精品8 | 给我免费的视频在线观看 | 国产成人精品视频ⅴa片软件竹菊 | 亚洲小说图区综合在线 | 亚洲中文字幕成人无码 | 成人女人看片免费视频放人 | 国产精品无码一区二区三区不卡 | 真人与拘做受免费视频 | 无码人妻丰满熟妇区毛片18 | 国产手机在线αⅴ片无码观看 | 色婷婷av一区二区三区之红樱桃 | 国产日产欧产精品精品app | 99久久无码一区人妻 | 国产一区二区三区精品视频 | 国产精品无码mv在线观看 | 一本色道久久综合亚洲精品不卡 | 玩弄中年熟妇正在播放 | 国产精品办公室沙发 | 成人亚洲精品久久久久软件 | 国产疯狂伦交大片 | 免费播放一区二区三区 | 欧美日本精品一区二区三区 | 黑人玩弄人妻中文在线 | 未满成年国产在线观看 | 国产国语老龄妇女a片 | 99国产精品白浆在线观看免费 | 日本精品人妻无码77777 天堂一区人妻无码 | 男人和女人高潮免费网站 | 久久综合九色综合97网 | 无码福利日韩神码福利片 | 国产精品久久久久影院嫩草 | 亚洲成熟女人毛毛耸耸多 | 黑人玩弄人妻中文在线 | 国产精品久久久久久亚洲影视内衣 | 成人综合网亚洲伊人 | 亚洲中文字幕va福利 | 国产熟妇高潮叫床视频播放 | 国产成人亚洲综合无码 | 久久精品女人天堂av免费观看 | 欧美性猛交xxxx富婆 | 国产精品亚洲五月天高清 | 日本护士毛茸茸高潮 | 精品偷自拍另类在线观看 | 西西人体www44rt大胆高清 | 久久久久se色偷偷亚洲精品av | 日本肉体xxxx裸交 | 久久精品国产99久久6动漫 | 亚洲成在人网站无码天堂 | 亚洲综合无码一区二区三区 | 久热国产vs视频在线观看 | 婷婷综合久久中文字幕蜜桃三电影 | 伊在人天堂亚洲香蕉精品区 | 无码av中文字幕免费放 | 无码av最新清无码专区吞精 | 人人澡人人透人人爽 | 亚洲日韩精品欧美一区二区 | 网友自拍区视频精品 | 亚洲精品一区二区三区在线观看 | 桃花色综合影院 | 精品少妇爆乳无码av无码专区 | 俄罗斯老熟妇色xxxx | 18黄暴禁片在线观看 | 无码人中文字幕 | 欧美freesex黑人又粗又大 | 欧美丰满熟妇xxxx性ppx人交 | 国产舌乚八伦偷品w中 | 在线看片无码永久免费视频 | 亚洲综合伊人久久大杳蕉 | 精品无码一区二区三区爱欲 | 亚洲成a人片在线观看无码 | 亚洲自偷精品视频自拍 | 东京热一精品无码av | 欧美精品一区二区精品久久 | 精品亚洲成av人在线观看 | 蜜臀aⅴ国产精品久久久国产老师 | √8天堂资源地址中文在线 | 成人片黄网站色大片免费观看 | 狠狠色噜噜狠狠狠7777奇米 | 亚洲狠狠色丁香婷婷综合 | 九九热爱视频精品 | 一本色道久久综合狠狠躁 | 日日碰狠狠丁香久燥 | 国产精品.xx视频.xxtv | 成人欧美一区二区三区黑人免费 | 国产成人av免费观看 | 欧美丰满熟妇xxxx性ppx人交 | 久久aⅴ免费观看 | 国产成人无码av在线影院 | 国产精品高潮呻吟av久久 | 久久亚洲精品中文字幕无男同 | 亚洲天堂2017无码 | 国产麻豆精品一区二区三区v视界 | 无码人妻出轨黑人中文字幕 | 中文字幕 人妻熟女 | 无码毛片视频一区二区本码 | 色婷婷久久一区二区三区麻豆 | 天天爽夜夜爽夜夜爽 | 99久久人妻精品免费二区 | 国产精品无码永久免费888 | 六月丁香婷婷色狠狠久久 | 欧洲精品码一区二区三区免费看 | 无码人妻丰满熟妇区五十路百度 | 在线a亚洲视频播放在线观看 | 久久97精品久久久久久久不卡 | 露脸叫床粗话东北少妇 | 国产另类ts人妖一区二区 | 国精品人妻无码一区二区三区蜜柚 | 成人欧美一区二区三区黑人免费 | 久9re热视频这里只有精品 | 久久99精品久久久久久动态图 | 樱花草在线播放免费中文 | 天堂а√在线中文在线 | 亚洲成a人片在线观看无码3d | 中文字幕乱码人妻二区三区 | 欧美精品国产综合久久 | 亚洲区小说区激情区图片区 | 欧美怡红院免费全部视频 | 久久精品国产一区二区三区 | 少妇太爽了在线观看 | 日韩成人一区二区三区在线观看 | 中文精品久久久久人妻不卡 | 永久免费观看美女裸体的网站 | 国产精品嫩草久久久久 | 国产在线精品一区二区高清不卡 | 精品少妇爆乳无码av无码专区 | 丰满少妇弄高潮了www | 夜夜高潮次次欢爽av女 | 欧美人妻一区二区三区 | 亚洲色偷偷男人的天堂 | 麻豆国产人妻欲求不满 | 伊人色综合久久天天小片 | 久久国产36精品色熟妇 | 精品无码一区二区三区的天堂 | 亚洲乱亚洲乱妇50p | 人人妻人人澡人人爽欧美一区 | 国产又粗又硬又大爽黄老大爷视 | 99久久精品日本一区二区免费 | 成人综合网亚洲伊人 | 天天摸天天碰天天添 | 亚洲の无码国产の无码步美 | 性欧美牲交xxxxx视频 | 正在播放东北夫妻内射 | 国产精品办公室沙发 | 撕开奶罩揉吮奶头视频 | 欧美日本免费一区二区三区 | 国产精品永久免费视频 | 亚洲国产精品一区二区美利坚 | 国产成人无码区免费内射一片色欲 | av小次郎收藏 | 日本精品久久久久中文字幕 | 亚洲熟妇色xxxxx亚洲 | 亚洲综合在线一区二区三区 | 亚洲色欲色欲欲www在线 | 免费观看又污又黄的网站 | 久久www免费人成人片 | 国产精品久久精品三级 | 亚洲色欲色欲欲www在线 | 黑人大群体交免费视频 | 强伦人妻一区二区三区视频18 | 亚洲欧洲日本无在线码 | 久久aⅴ免费观看 | 亚洲中文无码av永久不收费 | 99久久久国产精品无码免费 | a在线亚洲男人的天堂 | 成人动漫在线观看 | 99国产精品白浆在线观看免费 | 老熟妇乱子伦牲交视频 | 国产精品亚洲а∨无码播放麻豆 | 国产在线aaa片一区二区99 | 免费播放一区二区三区 | av无码久久久久不卡免费网站 | 成人欧美一区二区三区黑人免费 | 人妻插b视频一区二区三区 | 夜精品a片一区二区三区无码白浆 | 精品无码一区二区三区爱欲 | 又大又紧又粉嫩18p少妇 | 人妻夜夜爽天天爽三区 | 在线а√天堂中文官网 | 国产成人无码a区在线观看视频app | 亚洲乱码中文字幕在线 | 又大又硬又爽免费视频 | 清纯唯美经典一区二区 | 丰满岳乱妇在线观看中字无码 | 55夜色66夜色国产精品视频 | 亚洲精品国产精品乱码不卡 | 真人与拘做受免费视频一 | 亚洲自偷自拍另类第1页 | 中文字幕无码人妻少妇免费 | 国产超碰人人爽人人做人人添 | 色欲综合久久中文字幕网 | 欧美日韩视频无码一区二区三 | 国产69精品久久久久app下载 | 亚洲国产精品美女久久久久 | 97精品国产97久久久久久免费 | 日韩av无码一区二区三区不卡 | 一本久久a久久精品vr综合 | 亚洲精品久久久久久一区二区 | 精品久久综合1区2区3区激情 | 黑人粗大猛烈进出高潮视频 | 久久天天躁夜夜躁狠狠 | a在线观看免费网站大全 | 在线视频网站www色 | 99国产精品白浆在线观看免费 | 久久久中文久久久无码 | 97久久超碰中文字幕 | 成熟人妻av无码专区 | 无码帝国www无码专区色综合 | 一本久道久久综合婷婷五月 | a片在线免费观看 | 国产艳妇av在线观看果冻传媒 | 美女张开腿让人桶 | 国产激情无码一区二区app | 牲交欧美兽交欧美 | 国产亚洲视频中文字幕97精品 | 国产在线精品一区二区高清不卡 | 丁香花在线影院观看在线播放 | 人人妻在人人 | 牛和人交xxxx欧美 | 色婷婷av一区二区三区之红樱桃 | 久久久久99精品成人片 | 日韩欧美中文字幕公布 | 又紧又大又爽精品一区二区 | 奇米影视7777久久精品人人爽 | 亚洲国产精华液网站w | 亚洲熟悉妇女xxx妇女av | 国产免费无码一区二区视频 | 特黄特色大片免费播放器图片 | 国产人妻久久精品二区三区老狼 | 亚洲精品一区国产 | 国产免费久久精品国产传媒 | 成人欧美一区二区三区 | 一二三四社区在线中文视频 | 精品国产一区av天美传媒 | 性开放的女人aaa片 | 又粗又大又硬毛片免费看 | 亚洲色欲久久久综合网东京热 | 久久久www成人免费毛片 | 国产小呦泬泬99精品 | 国产成人无码区免费内射一片色欲 | 色一情一乱一伦一区二区三欧美 | 国产精品无码成人午夜电影 | 无人区乱码一区二区三区 | 激情综合激情五月俺也去 | 欧美放荡的少妇 | 亚洲人交乣女bbw | 亚洲日本在线电影 | 国产激情一区二区三区 | 波多野结衣高清一区二区三区 | 精品乱码久久久久久久 | 久久www免费人成人片 | 欧美丰满熟妇xxxx性ppx人交 | 国内精品久久毛片一区二区 | 久久综合给久久狠狠97色 | 波多野结衣av在线观看 | 国产亚洲tv在线观看 | 丝袜 中出 制服 人妻 美腿 | 性做久久久久久久免费看 | 国产综合久久久久鬼色 | 一本一道久久综合久久 | a在线观看免费网站大全 | 小鲜肉自慰网站xnxx | 亚洲国产成人a精品不卡在线 | 东京无码熟妇人妻av在线网址 | 国产精品.xx视频.xxtv | 无码任你躁久久久久久久 | 熟妇人妻激情偷爽文 | 欧美老妇与禽交 | 亚洲精品国产精品乱码视色 | 性史性农村dvd毛片 | 国产精品igao视频网 | 天堂а√在线地址中文在线 | 国产av一区二区精品久久凹凸 | 蜜臀av在线播放 久久综合激激的五月天 | 色综合久久久无码中文字幕 | 午夜福利不卡在线视频 | 国精品人妻无码一区二区三区蜜柚 | 免费播放一区二区三区 | 欧美色就是色 | 国产亚洲日韩欧美另类第八页 | 狠狠亚洲超碰狼人久久 | 欧美熟妇另类久久久久久不卡 | 久久久久成人精品免费播放动漫 | 亚洲码国产精品高潮在线 | 性欧美videos高清精品 | 亚洲欧美日韩综合久久久 | 国产口爆吞精在线视频 | 国产国语老龄妇女a片 | 97久久超碰中文字幕 | 在线成人www免费观看视频 | 国产亚洲tv在线观看 | 两性色午夜免费视频 | 波多野结衣aⅴ在线 | 丰满人妻精品国产99aⅴ | 欧洲欧美人成视频在线 | 老子影院午夜伦不卡 | 动漫av网站免费观看 | 极品嫩模高潮叫床 | 亚洲欧美中文字幕5发布 | 亚洲码国产精品高潮在线 | 欧美人与物videos另类 | 国产精品理论片在线观看 | 国产精品免费大片 | 国产精品人妻一区二区三区四 | a片免费视频在线观看 | 无码人妻久久一区二区三区不卡 | 中文精品久久久久人妻不卡 | 国产凸凹视频一区二区 | 亚洲a无码综合a国产av中文 | 中文字幕无码日韩欧毛 | 在线观看国产一区二区三区 | 欧美大屁股xxxxhd黑色 | 亚洲乱码国产乱码精品精 | 国内少妇偷人精品视频免费 | 狠狠躁日日躁夜夜躁2020 | 国产精品久久久久9999小说 | 亚洲呦女专区 | 国产成人无码a区在线观看视频app | 国产精品二区一区二区aⅴ污介绍 | 亚洲色偷偷男人的天堂 | 人妻体内射精一区二区三四 | 色综合天天综合狠狠爱 | 欧美熟妇另类久久久久久多毛 | 香港三级日本三级妇三级 | 国产精品久久久久久亚洲毛片 | 亚洲最大成人网站 | 亚洲大尺度无码无码专区 | 欧美日韩精品 | av在线亚洲欧洲日产一区二区 | 中文字幕亚洲情99在线 | 无码一区二区三区在线观看 | 99精品无人区乱码1区2区3区 | 日本精品久久久久中文字幕 | 中文字幕色婷婷在线视频 | 无码国产乱人伦偷精品视频 | 亚洲欧美精品伊人久久 | 国产后入清纯学生妹 | 人妻少妇精品久久 | 中文字幕人成乱码熟女app | 麻豆md0077饥渴少妇 | 狠狠色色综合网站 | 欧洲精品码一区二区三区免费看 | 天堂一区人妻无码 | 在线观看欧美一区二区三区 | 亚洲 激情 小说 另类 欧美 | 亚洲人成人无码网www国产 | 中文字幕日韩精品一区二区三区 | 午夜时刻免费入口 | 久久综合九色综合欧美狠狠 | 男人的天堂2018无码 | 国产婷婷色一区二区三区在线 | 无码人妻精品一区二区三区不卡 | 亚洲七七久久桃花影院 | 精品久久久久香蕉网 | 亚洲日韩一区二区三区 | 人人妻在人人 | 日本一区二区三区免费高清 | 人人妻人人澡人人爽人人精品 | 夜精品a片一区二区三区无码白浆 | 麻豆国产丝袜白领秘书在线观看 | 国产xxx69麻豆国语对白 | 久久伊人色av天堂九九小黄鸭 | 久久精品中文闷骚内射 | 日本熟妇大屁股人妻 | 日韩在线不卡免费视频一区 | 欧美日韩人成综合在线播放 | 亚洲无人区午夜福利码高清完整版 | 熟女少妇人妻中文字幕 | 精品国产国产综合精品 | 日韩精品无码免费一区二区三区 | 日韩欧美中文字幕在线三区 | 在线成人www免费观看视频 | 国产99久久精品一区二区 | 亚洲日韩av一区二区三区中文 | 国产亚洲tv在线观看 | 日本精品人妻无码77777 天堂一区人妻无码 | 美女毛片一区二区三区四区 | 亚洲国产欧美国产综合一区 | 妺妺窝人体色www在线小说 | аⅴ资源天堂资源库在线 | 欧美日韩视频无码一区二区三 | 欧美午夜特黄aaaaaa片 | 亚洲男人av天堂午夜在 | 中文字幕乱码人妻无码久久 | 欧美激情一区二区三区成人 | 国产人妻精品一区二区三区 | 性啪啪chinese东北女人 | 久青草影院在线观看国产 | 激情五月综合色婷婷一区二区 | 久久久久久av无码免费看大片 | 国产成人精品久久亚洲高清不卡 | 7777奇米四色成人眼影 | 久精品国产欧美亚洲色aⅴ大片 | 精品厕所偷拍各类美女tp嘘嘘 | 窝窝午夜理论片影院 | 国产卡一卡二卡三 | 国产精品久久久久久亚洲毛片 | 国产卡一卡二卡三 | 午夜精品一区二区三区的区别 | 日韩欧美群交p片內射中文 | 色综合天天综合狠狠爱 | 三上悠亚人妻中文字幕在线 | 精品无码av一区二区三区 | 亚洲精品成人av在线 | 久久综合九色综合97网 | 狠狠色欧美亚洲狠狠色www | 国内少妇偷人精品视频 | 在线天堂新版最新版在线8 | 久久99国产综合精品 | 久久国产劲爆∧v内射 | 久久人人爽人人爽人人片ⅴ | 国产精品人人爽人人做我的可爱 | 老子影院午夜精品无码 | 中文字幕日产无线码一区 | 欧美刺激性大交 | 欧美国产亚洲日韩在线二区 | 激情内射日本一区二区三区 | 亚洲精品一区二区三区大桥未久 | 国产成人无码专区 | 亚洲乱码国产乱码精品精 | 高清国产亚洲精品自在久久 | 日韩精品成人一区二区三区 | 亚洲国产欧美日韩精品一区二区三区 | 亚洲国产成人a精品不卡在线 | 日本精品久久久久中文字幕 | 草草网站影院白丝内射 | 国产又爽又黄又刺激的视频 | 97人妻精品一区二区三区 | 亚洲成熟女人毛毛耸耸多 | 少妇邻居内射在线 | 国产高清不卡无码视频 | 99久久精品午夜一区二区 | 中文字幕无码视频专区 | 亚洲精品中文字幕乱码 | 亚洲va欧美va天堂v国产综合 | 国产人妖乱国产精品人妖 | 小泽玛莉亚一区二区视频在线 | 九一九色国产 | 伊在人天堂亚洲香蕉精品区 | 国产猛烈高潮尖叫视频免费 | 精品乱子伦一区二区三区 | av在线亚洲欧洲日产一区二区 | 欧美亚洲国产一区二区三区 | 婷婷丁香六月激情综合啪 | 国产综合色产在线精品 | 亚无码乱人伦一区二区 | 国产午夜无码精品免费看 | 国产特级毛片aaaaaa高潮流水 | 国内精品人妻无码久久久影院 | 激情五月综合色婷婷一区二区 | 久久国产劲爆∧v内射 | 国产精品无套呻吟在线 | 窝窝午夜理论片影院 | 熟女俱乐部五十路六十路av | 亚洲精品国产第一综合99久久 | 国内综合精品午夜久久资源 | 国产真人无遮挡作爱免费视频 | 欧美精品免费观看二区 | 久久天天躁狠狠躁夜夜免费观看 | 97精品国产97久久久久久免费 | 亚洲日韩av一区二区三区中文 | 丁香花在线影院观看在线播放 | 中文字幕精品av一区二区五区 | 人人妻人人澡人人爽人人精品 | 久久综合九色综合97网 | 国精品人妻无码一区二区三区蜜柚 | 亚洲日韩av片在线观看 | 亚洲日韩乱码中文无码蜜桃臀网站 | 窝窝午夜理论片影院 | 熟女俱乐部五十路六十路av | 午夜精品一区二区三区在线观看 | 无码精品国产va在线观看dvd | 狠狠亚洲超碰狼人久久 | 国产乱子伦视频在线播放 | 四虎国产精品免费久久 | 欧美性生交xxxxx久久久 | 夫妻免费无码v看片 | 99久久人妻精品免费一区 | 亚洲精品中文字幕 | 日本在线高清不卡免费播放 | 婷婷综合久久中文字幕蜜桃三电影 | 久久99精品久久久久婷婷 | 欧美阿v高清资源不卡在线播放 | 国产亚洲精品精品国产亚洲综合 | 国产一区二区三区日韩精品 | 丰满肥臀大屁股熟妇激情视频 | 任你躁在线精品免费 | 亚洲综合久久一区二区 | 天天躁夜夜躁狠狠是什么心态 | 亚洲成色在线综合网站 | 少妇性荡欲午夜性开放视频剧场 | 无码免费一区二区三区 | 色婷婷综合激情综在线播放 | 骚片av蜜桃精品一区 | 成人一在线视频日韩国产 | 377p欧洲日本亚洲大胆 | а√资源新版在线天堂 | 亚洲中文字幕成人无码 | 国产又粗又硬又大爽黄老大爷视 | 无码吃奶揉捏奶头高潮视频 | 亚洲色无码一区二区三区 | 久久午夜夜伦鲁鲁片无码免费 | 激情综合激情五月俺也去 | 麻豆人妻少妇精品无码专区 | 亚洲综合另类小说色区 | 久久99精品国产.久久久久 | 亚洲精品国产精品乱码不卡 | 亚洲啪av永久无码精品放毛片 | 国产三级久久久精品麻豆三级 | аⅴ资源天堂资源库在线 | 任你躁国产自任一区二区三区 | 中文字幕 亚洲精品 第1页 | 成人精品一区二区三区中文字幕 | 国产偷国产偷精品高清尤物 | 国产av一区二区三区最新精品 | 午夜精品久久久内射近拍高清 | 在线а√天堂中文官网 | 强奷人妻日本中文字幕 | 蜜桃臀无码内射一区二区三区 | 国产成人人人97超碰超爽8 | 国产97人人超碰caoprom | 精品成在人线av无码免费看 | 在线观看欧美一区二区三区 | 天堂亚洲免费视频 | 成人毛片一区二区 | 色狠狠av一区二区三区 | 奇米影视7777久久精品人人爽 | 人妻少妇精品视频专区 | 日欧一片内射va在线影院 | 激情爆乳一区二区三区 | 精品少妇爆乳无码av无码专区 | 久久综合色之久久综合 | 荫蒂添的好舒服视频囗交 | 少妇人妻大乳在线视频 | 少妇激情av一区二区 | 日本成熟视频免费视频 | 精品久久久无码中文字幕 | 国产在线精品一区二区三区直播 | 97人妻精品一区二区三区 | 麻豆md0077饥渴少妇 | 性欧美大战久久久久久久 | 乱中年女人伦av三区 | 亚洲国产高清在线观看视频 | 少妇性荡欲午夜性开放视频剧场 | 人妻与老人中文字幕 | 久久人人97超碰a片精品 | 久久久久久亚洲精品a片成人 | 久久无码中文字幕免费影院蜜桃 | 无码纯肉视频在线观看 | 亚洲 激情 小说 另类 欧美 | 婷婷色婷婷开心五月四房播播 | 亚洲无人区午夜福利码高清完整版 | 国产成人一区二区三区在线观看 | 人人澡人摸人人添 | 亚洲精品国产a久久久久久 | 牲交欧美兽交欧美 | 在线成人www免费观看视频 | 高清国产亚洲精品自在久久 | 欧美性猛交内射兽交老熟妇 | 人妻天天爽夜夜爽一区二区 | 国产精品久久久av久久久 | 日本一卡二卡不卡视频查询 | 对白脏话肉麻粗话av | 人人妻人人澡人人爽精品欧美 | 妺妺窝人体色www婷婷 | 又大又黄又粗又爽的免费视频 | 3d动漫精品啪啪一区二区中 | 成人无码精品一区二区三区 | 亚洲自偷自偷在线制服 | 国产乱码精品一品二品 | 黑人大群体交免费视频 | 日韩欧美中文字幕在线三区 | 水蜜桃av无码 | 亚洲精品久久久久中文第一幕 | 极品嫩模高潮叫床 | 亚欧洲精品在线视频免费观看 | 对白脏话肉麻粗话av | 亚洲经典千人经典日产 | 国产日产欧产精品精品app | 极品尤物被啪到呻吟喷水 | 老熟妇乱子伦牲交视频 | 国产精品对白交换视频 | 国产乱子伦视频在线播放 | 亚洲精品一区二区三区婷婷月 | 国产后入清纯学生妹 | 久久国内精品自在自线 | 中文字幕精品av一区二区五区 | 99re在线播放 | 日韩精品久久久肉伦网站 | 大肉大捧一进一出好爽视频 | 久久午夜无码鲁丝片午夜精品 | 成人片黄网站色大片免费观看 | 98国产精品综合一区二区三区 | 亚洲 日韩 欧美 成人 在线观看 | 美女黄网站人色视频免费国产 | 久久国产自偷自偷免费一区调 | 亚洲国产一区二区三区在线观看 | 亚洲国产精品美女久久久久 | 又大又硬又爽免费视频 | 久青草影院在线观看国产 | 少妇性俱乐部纵欲狂欢电影 | 国产午夜福利亚洲第一 | 久久国产精品精品国产色婷婷 | 人妻有码中文字幕在线 | 老太婆性杂交欧美肥老太 | 日韩精品一区二区av在线 | 18无码粉嫩小泬无套在线观看 | 久久久无码中文字幕久... | 少妇无码吹潮 | 亚洲精品久久久久中文第一幕 | 高清无码午夜福利视频 | 人妻夜夜爽天天爽三区 | 一本色道婷婷久久欧美 | 任你躁在线精品免费 | 中国女人内谢69xxxxxa片 | 无码午夜成人1000部免费视频 | 日韩 欧美 动漫 国产 制服 | 97色伦图片97综合影院 | 男女下面进入的视频免费午夜 | 国产精品成人av在线观看 | 精品无码一区二区三区爱欲 | 亚洲国产一区二区三区在线观看 | 亚洲国产精品一区二区第一页 | 骚片av蜜桃精品一区 | 野外少妇愉情中文字幕 | 国内精品久久毛片一区二区 | 国产卡一卡二卡三 | 天天拍夜夜添久久精品 | 亚洲国产欧美日韩精品一区二区三区 | 300部国产真实乱 | 亚洲乱亚洲乱妇50p | 性欧美疯狂xxxxbbbb | 亚洲色大成网站www | 久久久久久久久888 | 国产精品久久久久无码av色戒 | 水蜜桃av无码 | 风流少妇按摩来高潮 | 人人妻人人澡人人爽欧美一区九九 | ass日本丰满熟妇pics | 国产精品va在线播放 | 国产精品亚洲lv粉色 | 99麻豆久久久国产精品免费 | 真人与拘做受免费视频一 | 久久午夜无码鲁丝片 | 日欧一片内射va在线影院 | 日本乱偷人妻中文字幕 | 国产亚洲人成a在线v网站 | 亚洲 高清 成人 动漫 | 亚洲乱码日产精品bd | 97人妻精品一区二区三区 | 国产精品丝袜黑色高跟鞋 | 无码一区二区三区在线观看 | 亚洲中文字幕无码一久久区 | 日日躁夜夜躁狠狠躁 | av在线亚洲欧洲日产一区二区 | 国产欧美亚洲精品a | 一本久道久久综合狠狠爱 | 欧美 日韩 亚洲 在线 | 国产真人无遮挡作爱免费视频 | 久久综合给久久狠狠97色 | 在线观看国产午夜福利片 | 一个人看的视频www在线 | 国产精品久久久久久久影院 | 女人和拘做爰正片视频 | 欧美高清在线精品一区 | 国产性生交xxxxx无码 | 夜先锋av资源网站 | aⅴ在线视频男人的天堂 | 国内丰满熟女出轨videos | 久久无码中文字幕免费影院蜜桃 | 性生交片免费无码看人 | 4hu四虎永久在线观看 | 久久午夜无码鲁丝片秋霞 | 131美女爱做视频 | 牲欲强的熟妇农村老妇女 | 好男人www社区 | 亚洲精品国偷拍自产在线麻豆 | 宝宝好涨水快流出来免费视频 | 亚洲欧美中文字幕5发布 | 精品无码一区二区三区的天堂 | 男人的天堂2018无码 | 国产精品亚洲一区二区三区喷水 | 大乳丰满人妻中文字幕日本 | 国产成人精品久久亚洲高清不卡 | 日本丰满护士爆乳xxxx | 亚洲国产精品无码一区二区三区 | 午夜无码人妻av大片色欲 | 国产亚洲日韩欧美另类第八页 | 国产激情综合五月久久 | 亚洲日韩av一区二区三区四区 | 国産精品久久久久久久 | 中文字幕乱码亚洲无线三区 | 久久久久久久女国产乱让韩 | 高清无码午夜福利视频 | 99在线 | 亚洲 | 伦伦影院午夜理论片 | 免费看少妇作爱视频 | 在线播放亚洲第一字幕 | 中国女人内谢69xxxx | 无码av最新清无码专区吞精 | 99久久精品国产一区二区蜜芽 | 欧美精品无码一区二区三区 | 精品偷拍一区二区三区在线看 | 日本精品人妻无码免费大全 | 黑人巨大精品欧美黑寡妇 | 久久综合九色综合97网 | 偷窥村妇洗澡毛毛多 | 好男人社区资源 | 久久精品国产亚洲精品 | 亚洲a无码综合a国产av中文 | 日本高清一区免费中文视频 | 久久午夜无码鲁丝片午夜精品 | 欧美日韩一区二区免费视频 | 亚洲日本va午夜在线电影 | www国产亚洲精品久久久日本 | 成人影院yy111111在线观看 | 亚洲国产一区二区三区在线观看 | 永久黄网站色视频免费直播 | 精品国产一区av天美传媒 | 久久成人a毛片免费观看网站 | 国产人妖乱国产精品人妖 | 在线观看国产午夜福利片 | www国产精品内射老师 | 日本va欧美va欧美va精品 | 少妇高潮喷潮久久久影院 | 国产精品人妻一区二区三区四 | 性做久久久久久久久 | 久久久无码中文字幕久... | 性做久久久久久久久 | 成 人影片 免费观看 | 欧美精品无码一区二区三区 | 国产亚洲人成a在线v网站 | 免费无码av一区二区 | 久久久中文久久久无码 | 色偷偷人人澡人人爽人人模 | 久久久精品欧美一区二区免费 | 成人精品视频一区二区 | 亚洲一区二区三区香蕉 | 熟女俱乐部五十路六十路av | 国产精品毛多多水多 | av香港经典三级级 在线 | 亚洲乱码中文字幕在线 | 国产成人精品一区二区在线小狼 | 麻花豆传媒剧国产免费mv在线 | 波多野结衣aⅴ在线 | 免费视频欧美无人区码 | 久久天天躁狠狠躁夜夜免费观看 | 无套内谢老熟女 | 暴力强奷在线播放无码 | 红桃av一区二区三区在线无码av | av无码久久久久不卡免费网站 | 免费观看黄网站 | 理论片87福利理论电影 | 77777熟女视频在线观看 а天堂中文在线官网 | 又色又爽又黄的美女裸体网站 | 欧美 日韩 亚洲 在线 | 国产色视频一区二区三区 | 激情内射日本一区二区三区 | 两性色午夜免费视频 | 精品无人国产偷自产在线 | 成人一区二区免费视频 | 性开放的女人aaa片 | 久久综合香蕉国产蜜臀av | 亚洲爆乳精品无码一区二区三区 | 麻豆md0077饥渴少妇 | 国产精品毛多多水多 |