99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

OpenCV圖像特效變換:扭曲、球形與波動(dòng)變換從原理到實(shí)戰(zhàn)

OpenCV圖像特效變換:扭曲、球形與波動(dòng)變換從原理到實(shí)戰(zhàn) 提到OpenCV很多人第一反應(yīng)是人臉識(shí)別、物體檢測這種“正經(jīng)”功能。但今天我想聊點(diǎn)好玩的——用OpenCV給圖像做特效變換具體一點(diǎn)就是扭曲變換、球形變換、波動(dòng)變換。這三個(gè)效果看起來像加了特殊濾鏡其實(shí)底層全是數(shù)學(xué)公式在像素坐標(biāo)上做文章屬于OpenCV圖像處理里少有人細(xì)講、但用來練手或者做創(chuàng)意效果特別過癮的一類內(nèi)容。這類變換能做什么往小了說可以給你的頭像做個(gè)哈哈鏡效果往大了說可以做魚眼鏡頭校正、VR全景圖映射、圖片水波紋特效甚至一些老照片修復(fù)里的幾何矯正也會(huì)用到類似思路。不管你是剛?cè)腴TOpenCV的初學(xué)者還是已經(jīng)寫過不少常規(guī)圖像處理代碼的開發(fā)者這篇文章都能讓你對“怎么通過改變像素坐標(biāo)來重塑圖像”這件事有一個(gè)通透的理解。我會(huì)從原理講到代碼再講到參數(shù)怎么調(diào)、坑在哪里盡量讓你看完就能照著寫出來。1. 環(huán)境準(zhǔn)備與基本原理先搞清楚“變換到底在變什么”動(dòng)手寫代碼之前我建議先花兩分鐘把底層的概念捋清楚。因?yàn)橹灰憷斫饬诉@一步后面所有變換都是往一個(gè)模板里套公式而已。1.1 5分鐘搭建OpenCV開發(fā)環(huán)境如果你已經(jīng)裝好了OpenCV這節(jié)可以直接跳過。還沒裝的話我推薦用Python環(huán)境因?yàn)閷憟D像變換這類算法Python配合NumPy簡直不要太順滑。創(chuàng)建一個(gè)虛擬環(huán)境然后安裝python -m venv cv_env source cv_env/bin/activate # Windows下是 cv_env\Scripts\activate pip install opencv-python numpy matplotlib這里有幾個(gè)細(xì)節(jié)值得說下。第一一定要用虛擬環(huán)境別直接裝到系統(tǒng)Python里不然以后項(xiàng)目多了依賴版本沖突起來會(huì)讓你懷疑人生。第二只做圖像處理的話裝opencv-python就夠了opencv-contrib-python里面主要多了一些SIFT、SURF這類專利算法和擴(kuò)展模塊當(dāng)前用不上。第三檢查安裝是否成功在Python里執(zhí)行import cv2 print(cv2.__version__)能正常輸出版本號(hào)就說明環(huán)境沒問題。這里補(bǔ)充一個(gè)我個(gè)人踩過的坑如果你在Windows下用pip install opencv-python裝完import時(shí)報(bào)DLL load failed之類的錯(cuò)誤大概率是Visual C Redistributable沒裝去微軟官網(wǎng)下一個(gè)裝上就好了跟OpenCV本身的安裝路徑?jīng)]關(guān)系。1.2 圖像變換的本質(zhì)像素坐標(biāo)的“搬家”我們平時(shí)做的很多圖像處理操作比如亮度調(diào)整、對比度增強(qiáng)、濾波去噪本質(zhì)上都是在修改像素的像素值。但幾何變換不一樣它修改的是像素的坐標(biāo)位置。打個(gè)比方你就明白了。想象一張照片是鋪在桌子上的一堆彩色小方塊每個(gè)方塊都有自己的位置?,F(xiàn)在你用手掌在小方塊堆上用力一推——小方塊們還是那些小方塊顏色一個(gè)沒變但位置全都偏移了。推的方向不同、力度不同就會(huì)形成扭曲、波浪、凸起等不同的視覺效果。這就是幾何變換的全部秘密像素值不變坐標(biāo)變。用數(shù)學(xué)語言來說原始圖像上坐標(biāo)為(x, y)的像素經(jīng)過某個(gè)函數(shù)f變換后跑到新圖像上的坐標(biāo)(x, y)去了。如果我們知道每個(gè)原圖坐標(biāo)對應(yīng)的新坐標(biāo)就可以把像素“搬”過去。這個(gè)函數(shù)f就是變換的核心不同的f造就不同的特效。但在OpenCV里我們實(shí)際做的時(shí)候通常是反著來的。不是從原圖坐標(biāo)算新圖坐標(biāo)而是從目標(biāo)圖像的每個(gè)像素坐標(biāo)出發(fā)去算它在原圖上的對應(yīng)位置然后把這個(gè)位置的像素值取過來。這叫做反向映射英文叫inverse mapping。為什么要反過來做因?yàn)檎蛴成鋾?huì)出現(xiàn)一個(gè)問題原圖里兩個(gè)相鄰像素經(jīng)過變換后可能落到目標(biāo)圖像的同一個(gè)位置造成重疊而另一些位置可能壓根沒有像素落過去形成空洞。反向映射配合插值算法就可以保證目標(biāo)圖像的每個(gè)像素都能找到合理的取值。這個(gè)“反向映射”的思路基本貫穿著今天所有變換的實(shí)現(xiàn)你先把這句話刻在腦子里我們寫代碼的時(shí)候循環(huán)遍歷的是目標(biāo)圖像的坐標(biāo)計(jì)算的是它們對應(yīng)的原圖坐標(biāo)再用插值把像素值取回來。2. OpenCV自帶變換方式一眼看穿官方代碼的套路在動(dòng)手寫自定義變換之前先看看OpenCV里已有的工具。官方其實(shí)已經(jīng)給我們準(zhǔn)備好了幾何變換的基礎(chǔ)函數(shù)理解這些函數(shù)怎么用后面自己寫算法才能得心應(yīng)手。2.1 仿射變換和透視變換最簡單的一類坐標(biāo)變換OpenCV中最基本的幾何變換是仿射變換和透視變換。仿射變換保持直線和平行線不變可以完成旋轉(zhuǎn)、縮放、平移和錯(cuò)切透視變換則可以模擬人眼觀察不同角度平面時(shí)的效果讓圖像產(chǎn)生“近大遠(yuǎn)小”的透視感。仿射變換通常用cv2.warpAffine來實(shí)現(xiàn)核心是構(gòu)造一個(gè)2x3的變換矩陣M。旋轉(zhuǎn)加縮放可以這樣寫import cv2 import numpy as np img cv2.imread(photo.jpg) h, w img.shape[:2] # 構(gòu)造旋轉(zhuǎn)矩陣center為旋轉(zhuǎn)中心angle為旋轉(zhuǎn)角度scale為縮放系數(shù) M cv2.getRotationMatrix2D((w // 2, h // 2), 45, 0.75) rotated cv2.warpAffine(img, M, (w, h))透視變換用cv2.warpPerspective需要給出原圖中四個(gè)點(diǎn)和目標(biāo)圖中四個(gè)點(diǎn)的對應(yīng)關(guān)系算出3x3的透視矩陣Hsrc_pts np.float32([[100, 100], [500, 100], [100, 500], [500, 500]]) dst_pts np.float32([[0, 0], [450, 50], [50, 450], [500, 500]]) H cv2.getPerspectiveTransform(src_pts, dst_pts) warped cv2.warpPerspective(img, H, (w, h))這兩個(gè)函數(shù)屬于最基礎(chǔ)的坐標(biāo)變換原理都是線性代數(shù)中的矩陣運(yùn)算。但注意了它們能表達(dá)的變換類型非常有限。扭曲變換那種“不同位置偏移量不同”的效果仿射變換做不了球形變換那種“中間凸起、四周壓縮”的效果透視變換也做不了。2.2 重映射remap特效變換的全能鑰匙真正能實(shí)現(xiàn)任意特效變換的OpenCV函數(shù)是cv2.remap它接受兩張映射表一張表示目標(biāo)圖像每個(gè)像素的x坐標(biāo)在原圖中對應(yīng)的x值另一張對應(yīng)y值。這么說有點(diǎn)繞直接看代碼import cv2 import numpy as np img cv2.imread(photo.jpg) h, w img.shape[:2] map_x np.zeros((h, w), dtypenp.float32) map_y np.zeros((h, w), dtypenp.float32) for i in range(h): for j in range(w): map_x[i, j] j # 目標(biāo)圖像(i,j)處取原圖的第j列 map_y[i, j] i # 目標(biāo)圖像(i,j)處取原圖的第i行 result cv2.remap(img, map_x, map_y, interpolationcv2.INTER_LINEAR)上面這段代碼生成的映射表相當(dāng)于什么都沒做——目標(biāo)圖像每個(gè)像素都是從原圖相同位置取值。但如果你在循環(huán)里加點(diǎn)“花活”比如讓map_x[i, j] j 5 * np.sin(i / 10.0)就會(huì)得到一個(gè)上下波動(dòng)的橫向偏移效果。cv2.remap就是所有自定義變換的萬能鑰匙。它做的事情本質(zhì)上就是你告訴我目標(biāo)圖像每個(gè)像素該從原圖的哪個(gè)位置取值我負(fù)責(zé)用插值算法高效地把像素填好。你只需要負(fù)責(zé)“告訴它”這件事——也就是構(gòu)造map_x和map_y。OpenCV內(nèi)部會(huì)做數(shù)值優(yōu)化比你用Python寫雙重循環(huán)去img[y, x]提取像素快得多。這里補(bǔ)充一個(gè)關(guān)鍵經(jīng)驗(yàn)map_x和map_y的數(shù)據(jù)類型必須是float32。很多人第一次寫會(huì)順手用np.zeros((h, w), dtypenp.int32)然后發(fā)現(xiàn)cv2.remap直接報(bào)錯(cuò)。官方文檔里明確寫著要求是浮點(diǎn)型因?yàn)椴逯涤?jì)算需要用到小數(shù)坐標(biāo)。3. 自定義三類變換從公式到代碼一步步實(shí)現(xiàn)接下來進(jìn)入正題。今天要實(shí)現(xiàn)的三種變換——扭曲變換、球形變換、波動(dòng)變換從原理上分屬三類不同的坐標(biāo)映射方式全局非線性扭曲、局部徑向變形、周期性波動(dòng)偏移。下面分別展開。3.1 扭曲變換讓圖像像被擰過一樣先說扭曲變換效果上類似于把圖像放在一塊柔軟橡膠板上然后揪住不同位置往不同方向擰。它的核心公式可以寫成這樣map_x(i, j) j strength * sin(i * frequency) * cos(j * frequency) map_y(i, j) i strength * cos(i * frequency) * sin(j * frequency)不要被復(fù)雜的數(shù)學(xué)表達(dá)式嚇到拆開來看就很好理解了。map_x(i, j)表示目標(biāo)圖像第(i, j)個(gè)像素應(yīng)該從原圖的哪個(gè)x坐標(biāo)取值。j是原始位置后面那一串是一個(gè)偏移量讓像素在實(shí)際位置的基礎(chǔ)上產(chǎn)生正弦波狀的位移。因?yàn)閟in和cos是正負(fù)交替的所以不同位置的偏移方向不同有的像素往左移有的往右移有的往上走有的往下走組合起來就會(huì)形成那種“擰麻花”的扭曲感。完整代碼實(shí)現(xiàn)如下import cv2 import numpy as np def twist_tranform(img, strength20, frequency0.05): h, w img.shape[:2] map_x np.zeros((h, w), dtypenp.float32) map_y np.zeros((h, w), dtypenp.float32) rows, cols np.indices((h, w), dtypenp.float32) map_x cols strength * np.sin(rows * frequency) * np.cos(cols * frequency) map_y rows strength * np.cos(rows * frequency) * np.sin(cols * frequency) twisted cv2.remap(img, map_x, map_y, interpolationcv2.INTER_LINEAR) return twisted img cv2.imread(photo.jpg) twisted_img twist_tranform(img, strength25, frequency0.03) cv2.imwrite(twisted_result.jpg, twisted_img)這里我用了np.indices一次性生成所有坐標(biāo)網(wǎng)格配合NumPy的向量化操作比雙重for循環(huán)快上一兩個(gè)數(shù)量級。核心的邏輯變成了對兩個(gè)尺寸等同原圖的浮點(diǎn)矩陣做公式運(yùn)算remap讀這兩個(gè)矩陣就知道每個(gè)目標(biāo)像素該去哪取值。效果上strength參數(shù)控制扭曲的幅度值越大變形越劇烈frequency控制扭曲的空間頻率值越小波紋越大越平滑值越大扭曲越細(xì)密。建議從strength15, frequency0.05開始調(diào)然后根據(jù)自己的圖片分辨率縮放。需要注意的是如果strength設(shè)得過大圖像邊緣會(huì)出現(xiàn)嚴(yán)重的拉絲現(xiàn)象——這是因?yàn)檫吘壪袼乇挥成涞搅嗽瓐D之外沒有任何對應(yīng)像素可取。3.2 球形變換把平面圖像鼓成球面球形變換做出來的效果就像你把一張照片貼在了一個(gè)凸球面上中間向外鼓出來邊緣向內(nèi)收攏。這在攝影后期里很常見比如制作魚眼鏡頭效果時(shí)就會(huì)用到類似的反向計(jì)算。球形變換的數(shù)學(xué)原理相對復(fù)雜一些核心思路是先把平面坐標(biāo)歸一化到[-1, 1]區(qū)間然后把平面想象成一個(gè)球面在z軸方向上的投影最后反解出每個(gè)點(diǎn)在“原始平面”上的位置。具體公式如下歸一化坐標(biāo) nx (j - cx) / cx ny (i - cy) / cy 徑向距離 r2 nx * nx ny * ny 映射回原圖坐標(biāo) map_x(i, j) cx nx * sqrt(1 - r2 / 2) * cx map_y(i, j) cy ny * sqrt(1 - r2 / 2) * cy你可能會(huì)問這個(gè)sqrt(1 - r2 / 2)是怎么來的。我的理解是我們在模擬一個(gè)半徑為R的單位球面某個(gè)平面點(diǎn)到球心的距離為d那么這個(gè)點(diǎn)在球面上的高度就是sqrt(R^2 - d^2)。當(dāng)R一定時(shí)這個(gè)高度指的其實(shí)是球面上對應(yīng)點(diǎn)的“拉伸比例”。這個(gè)公式具體推導(dǎo)涉及球面參數(shù)方程這里不展開但你要抓的重點(diǎn)是離中心越遠(yuǎn)的點(diǎn)映射后的位置越靠近中心產(chǎn)生向內(nèi)收縮的效果于是中間就“鼓”出來了。完整代碼如下import cv2 import numpy as np def spherical_transform(img, scale1.0): h, w img.shape[:2] cx, cy w / 2.0, h / 2.0 rows, cols np.indices((h, w), dtypenp.float32) nx (cols - cx) / cx ny (rows - cy) / cy r2 nx * nx ny * ny # 防止r2大于2否則sqrt里面會(huì)是負(fù)數(shù) r2 np.clip(r2, 0, 2) map_x cx nx * np.sqrt(1 - r2 / 2) * cx * scale map_y cy ny * np.sqrt(1 - r2 / 2) * cy * scale spherical cv2.remap(img, map_x.astype(np.float32), map_y.astype(np.float32), interpolationcv2.INTER_LINEAR) return spherical img cv2.imread(photo.jpg) spherical_img spherical_transform(img, scale0.9) cv2.imwrite(spherical_result.jpg, spherical_img)實(shí)際操作中我建議把scale參數(shù)控制在0.8到1.2之間。小于0.8時(shí)圖像中心膨脹得太厲害人臉會(huì)變得像照了哈哈鏡大于1.2時(shí)邊緣收縮太猛四個(gè)角的信息幾乎全丟。另外有個(gè)容易忽略的點(diǎn)圖像四個(gè)角的像素在球形變換后會(huì)被“擠壓”到離中心更近的位置所以大部分情況下四個(gè)角會(huì)出現(xiàn)黑色區(qū)域或者空白區(qū)域這是正?,F(xiàn)象不是代碼bug。如果你需要保持原圖完整可以考慮在變換前先把四角區(qū)域向外擴(kuò)展填充一圈或者用cv2.copyMakeBorder給圖像加個(gè)邊緣。3.3 波動(dòng)變換讓圖像泛起水波紋波動(dòng)變換是三種變換里視覺沖擊力最強(qiáng)的也是最好理解的。它能產(chǎn)生水面上蕩起漣漪的效果或者說像透過晃動(dòng)的水面看照片的那種扭曲感。實(shí)現(xiàn)方法是在x和y方向的映射中疊加一個(gè)正弦波偏移map_x(i, j) j amplitude * sin(2 * pi * frequency * i phase) map_y(i, j) i amplitude * cos(2 * pi * frequency * j phase)注意這里的兩個(gè)式子map_x疊加的是沿j方向的正弦波偏移map_y疊加的是沿i方向的余弦波偏移。交叉使用可以避免圖像往單一方向漂移形成更自然的水波紋效果。代碼import cv2 import numpy as np def wave_transform(img, amplitude10, frequency0.02, phase0): h, w img.shape[:2] rows, cols np.indices((h, w), dtypenp.float32) map_x cols amplitude * np.sin(2 * np.pi * frequency * rows phase) map_y rows amplitude * np.cos(2 * np.pi * frequency * cols phase) wave cv2.remap(img, map_x, map_y, interpolationcv2.INTER_LINEAR, borderModecv2.BORDER_REFLECT) return wave img cv2.imread(photo.jpg) wave_img wave_transform(img, amplitude12, frequency0.01) cv2.imwrite(wave_result.jpg, wave_img)波動(dòng)變換里有三個(gè)參數(shù)值得細(xì)說。amplitude是波動(dòng)幅度單位是像素?cái)?shù)值越大波紋越劇烈但太大圖像會(huì)出現(xiàn)明顯的斷裂感。frequency控制波動(dòng)的疏密頻率值越小波紋越寬大平滑頻率值越大波紋越細(xì)密。phase控制波的初始相位如果你要做動(dòng)畫效果——比如水波蕩漾的視頻——只需要隨時(shí)間改變phase的值就能讓波紋動(dòng)起來。這里我特意加了一個(gè)borderModecv2.BORDER_REFLECT參數(shù)作用是在圖像邊緣進(jìn)行反射填充。不添加這個(gè)參數(shù)的話波動(dòng)變換在圖像邊緣會(huì)產(chǎn)生大片黑色區(qū)域因?yàn)槟繕?biāo)圖像邊緣的像素在原圖中找不到對應(yīng)位置。反射填充可以利用邊緣像素的鏡像值填補(bǔ)這些空缺讓邊緣過渡自然很多。我試過幾種填充模式BORDER_REFLECT在處理水波紋效果時(shí)最自然而BORDER_WRAP在邊緣會(huì)產(chǎn)生奇怪的循環(huán)紋理。4. 三種變換的對比與參數(shù)控制一張表幫你快速找準(zhǔn)手感光有代碼還不夠?qū)嶋H使用的時(shí)候你很可能遇到“為什么我照參數(shù)調(diào)出來的效果跟別人不一樣”這種問題。這里我做個(gè)橫向?qū)Ρ葞湍憧焖俣ㄎ辉撚媚膫€(gè)變換、參數(shù)往哪個(gè)方向調(diào)。4.1 視覺特效與適用場景對比我把三種變換的視覺特性整理成了下面這張表方便你根據(jù)需求快速選擇變換類型視覺特點(diǎn)典型應(yīng)用場景參數(shù)敏感度扭曲變換圖像像被擰過整張圖均有偏移方向交錯(cuò)創(chuàng)意藝術(shù)效果、錯(cuò)位合成、背景紋理擾動(dòng)頻率參數(shù)極敏感過大直接墨糊球形變換中心向外鼓起邊緣向內(nèi)收縮魚眼鏡頭模擬、球面貼圖預(yù)覽、人像趣味效果中心位置直接影響變形范圍scale穩(wěn)定性中等波動(dòng)變換水波紋樣起伏方向感強(qiáng)水面倒影處理、動(dòng)態(tài)波紋動(dòng)畫、圖片趣味特效振幅和頻率搭配需控制參數(shù)過大則斷裂明顯從實(shí)現(xiàn)難度來說三者差別不大理解了remap之后都只是填公式的事。但從效果穩(wěn)定性來說球形變換最容易控制因?yàn)閰?shù)少效果和參數(shù)之間的對應(yīng)關(guān)系直觀扭曲變換最需要小心頻率參數(shù)稍微調(diào)大一點(diǎn)圖像就糊成一團(tuán)波動(dòng)變換居中花點(diǎn)時(shí)間調(diào)好參數(shù)后視覺反饋?zhàn)詈谩?.2 參數(shù)調(diào)節(jié)的“手感”經(jīng)驗(yàn)分享參數(shù)怎么調(diào)這是個(gè)經(jīng)驗(yàn)活。我不建議你在網(wǎng)上抄一組參數(shù)直接跑因?yàn)閳D像的尺寸、內(nèi)容、分辨率都會(huì)影響觀感。我的習(xí)慣是先拿一張分辨率適中的測試圖用OpenCV的cv2.getTrackbarPos做一個(gè)參數(shù)調(diào)節(jié)窗口邊拖邊看效果。一個(gè)簡易的調(diào)節(jié)框架如下import cv2 import numpy as np img cv2.imread(photo.jpg) def on_trackbar(val): strength cv2.getTrackbarPos(Strength, Adjust) freq cv2.getTrackbarPos(Freq, Adjust) / 100.0 result twist_tranform(img, strengthstrength, frequencyfreq) cv2.imshow(Adjust, result) cv2.namedWindow(Adjust) cv2.createTrackbar(Strength, Adjust, 15, 50, on_trackbar) cv2.createTrackbar(Freq, Adjust, 5, 30, on_trackbar) while True: on_trackbar(0) if cv2.waitKey(1) 0xFF ord(q): break cv2.destroyAllWindows()這個(gè)框架好處在于你可以實(shí)時(shí)感受每個(gè)參數(shù)對效果的影響而不是改一次代碼跑一次效率高太多。從我個(gè)人調(diào)參經(jīng)驗(yàn)來看扭曲變換的frequency控制在0.02到0.08之間比較出效果太小圖案看不出扭曲太大圖像糊成馬賽克球形變換的scale影響全局建議先固定scale1調(diào)中心位置再把scale往0.8到1.1的方向微調(diào)波動(dòng)變換的amplitude在8到20像素之間效果最好frequency在0.005到0.03之間比較自然。4.3 局部變形把球形變換限定到指定區(qū)域有時(shí)候你不想整張圖都變形只想把照片里人物的臉“鼓”一下或者只對某一塊區(qū)域做水波紋。比如你只想對圖像中心區(qū)域做局部球形變換就需要引入一個(gè)區(qū)域掩膜。實(shí)現(xiàn)思路是生成一個(gè)與圖像同尺寸的掩膜指定區(qū)域?yàn)?其他區(qū)域?yàn)?球形變換只作用于掩膜為1的像素其他像素保持原來的坐標(biāo)。代碼實(shí)現(xiàn)如下def local_spherical_transform(img, center, radius, scale1.0): h, w img.shape[:2] cx, cy center rows, cols np.indices((h, w), dtypenp.float32) mask np.sqrt((cols - cx) ** 2 (rows - cy) ** 2) radius nx (cols - cx) / radius ny (rows - cy) / radius r2 nx * nx ny * ny r2 np.clip(r2, 0, 2) map_x cols.copy() map_y rows.copy() map_x[mask] cx nx[mask] * np.sqrt(1 - r2[mask] / 2) * radius * scale map_y[mask] cy ny[mask] * np.sqrt(1 - r2[mask] / 2) * radius * scale result cv2.remap(img, map_x.astype(np.float32), map_y.astype(np.float32), interpolationcv2.INTER_LINEAR) return result這里的關(guān)鍵是通過布爾索引mask只對選定區(qū)域內(nèi)的像素更新映射值。注意map_x和map_y在其他位置要保持原始坐標(biāo)因此在初始化的時(shí)候用了cols.copy()和rows.copy()。這個(gè)邏輯可以推廣到任意變換比如局部扭曲、局部波動(dòng)等只需要在生成映射矩陣時(shí)判斷當(dāng)前像素是否在區(qū)域內(nèi)即可??赡苡腥藭?huì)問為什么區(qū)域外的像素也要放在map_x里因?yàn)閞emap要求你給出目標(biāo)圖像每一個(gè)像素的映射坐標(biāo)不能只給一部分。所以區(qū)域外的坐標(biāo)就是“自己到取自己”保證圖像不動(dòng)。5. 常見問題與性能優(yōu)化技巧代碼跑通了效果也出來了但真要拿到實(shí)際項(xiàng)目里用的時(shí)候你大概率還會(huì)碰上一堆奇怪問題。我把遇到過的高頻問題整理了一份“速查表”順帶說說怎么讓代碼跑得更快。5.1 高頻報(bào)錯(cuò)與現(xiàn)象排查速查表問題現(xiàn)象可能原因解決辦法cv2.remap報(bào)錯(cuò)說輸入類型不對map_x或map_y不是float32類型用np.float32顯式轉(zhuǎn)換圖像出現(xiàn)大面積黑色區(qū)域變換后大量像素坐標(biāo)超出原圖范圍且沒設(shè)置borderMode在remap中指定borderModecv2.BORDER_REFLECT或cv2.BORDER_WRAP必要時(shí)先加邊框變換后圖像出現(xiàn)“鋸齒”插值方式不合適改用cv2.INTER_CUBIC獲得更平滑效果速度略慢處理實(shí)時(shí)視頻可保持INTER_LINEAR變形過于劇烈圖像斷裂參數(shù)設(shè)置過大或者變換公式本身在部分區(qū)域產(chǎn)生奇點(diǎn)分母為0、根號(hào)為負(fù)減小參數(shù)對公式中的中間量做np.clip防止越界速度太慢大圖要好幾秒Python循環(huán)計(jì)算映射表太耗時(shí)用np.indices向量化替換嵌套for循環(huán)先縮放小圖驗(yàn)效果再處理原圖輸出圖像邊緣有奇怪的條紋映射表中出現(xiàn)了NaN比如球面變換里根號(hào)下為負(fù)檢查公式中間變量用np.clip和np.nan_to_num處理真正常見且最隱蔽的坑是第五行速度太慢。很多人第一次寫這類變換時(shí)會(huì)用雙層for循環(huán)遍歷每個(gè)像素然后逐個(gè)填map_x[i][j]。在1080P圖像上約207萬個(gè)像素Python跑這種嵌套循環(huán)一遍下來少說三五秒體驗(yàn)極差。我用np.indices 向量化運(yùn)算后同樣操作壓縮到幾十毫秒速度提升接近兩個(gè)數(shù)量級。這是這類算法從“能跑”到“實(shí)用”最關(guān)鍵的優(yōu)化手段。5.2 性能優(yōu)化從秒級到毫秒級的關(guān)鍵手段除了向量化還有一個(gè)更極端的性能優(yōu)化方案預(yù)計(jì)算映射表。如果你的變換參數(shù)固定圖像尺寸固定那么map_x和map_y只需要計(jì)算一次之后每一幀直接調(diào)用cv2.remap即可。比如你想給攝像頭視頻流加實(shí)時(shí)水波紋特效每次處理新幀時(shí)都重新計(jì)算映射表非常浪費(fèi)。正確的做法是第一次啟動(dòng)時(shí)根據(jù)視頻幀尺寸計(jì)算好映射表之后每一幀直接復(fù)用# 初始化階段只執(zhí)行一次 map_x, map_y generate_wave_maps(w, h, amplitude10, frequency0.02) # 每幀處理直接調(diào)用remap frame capture.read() frame_wave cv2.remap(frame, map_x, map_y, interpolationcv2.INTER_LINEAR)一個(gè)額外的優(yōu)化是使用cv2.UMat()或GPU模塊。但說實(shí)話OpenCV的Python接口只要用了向量化CPU上跑1080P的remap也能達(dá)到30ms左右完全可以滿足實(shí)時(shí)視頻處理的需求。除非你要處理4K甚至8K分辨率的視頻再去研究cv2.cuda.remap也不遲。5.3 幾個(gè)值得分享的調(diào)試技巧調(diào)試這類變換算法最容易犯的錯(cuò)就是“我只知道效果不對但不知道哪一步錯(cuò)了”。我的經(jīng)驗(yàn)是把中間過程可視化一幀一幀看。第一招先做小圖測試。把原圖縮放到200x200左右跑一遍速度極快方便快速驗(yàn)證公式和參數(shù)。效果對了再換大圖避免每次調(diào)試等好幾秒。第二招畫網(wǎng)格輔助觀察。在測試圖上畫一層細(xì)膩的網(wǎng)格線然后做變換看網(wǎng)格線的彎曲方向是否符合預(yù)期。這個(gè)方法能非常直觀地暴露公式的符號(hào)問題或者坐標(biāo)方向問題比對著抽象的效果圖猜測有用得多。第三招檢查映射表的數(shù)值范圍。直接打印map_x.min()和map_x.max()看是否超出了原圖寬度范圍如果超得太多結(jié)果必然會(huì)有大面積黑邊。另外提醒一句OpenCV的坐標(biāo)系統(tǒng)是(x, y)對應(yīng)數(shù)組訪問是img[y, x]也就是行是y列是x。在構(gòu)造map_x和map_y時(shí)千萬別搞混。我見過不少人在生成map_x時(shí)誤寫成了按行索引結(jié)果圖像上下左右全亂了。一個(gè)簡單的驗(yàn)證方法生成一個(gè)什么都不改的恒等映射跑一下看輸出是否跟原圖一致如果不一致說明坐標(biāo)系搞反了。6. 擴(kuò)展玩法如何用同一套思路做更多特效到這里三種變換的原理、代碼和調(diào)參你都掌握了。這套“生成映射表 cv2.remap”組合拳的價(jià)值遠(yuǎn)不止這三類效果。下面分享幾個(gè)擴(kuò)展方向如果你手頭正好有項(xiàng)目需要做類似創(chuàng)意效果可以少走彎路。6.1 把水波紋做成動(dòng)態(tài)視頻波動(dòng)變換的phase參數(shù)就是天然的動(dòng)畫開關(guān)。只要在視頻處理循環(huán)里不斷更新phase的值波紋就會(huì)動(dòng)起來。實(shí)現(xiàn)方式是在計(jì)算映射表時(shí)把phase作為變量傳入每幀增加一個(gè)小步長phase_accumulator 0.0 while True: ret, frame cap.read() if not ret: break phase_accumulator 0.1 map_x, map_y generate_wave_maps( frame.shape[1], frame.shape[0], amplitude15, frequency0.02, phasephase_accumulator ) frame_wave cv2.remap(frame, map_x, map_y, interpolationcv2.INTER_LINEAR) cv2.imshow(Wave, frame_wave) if cv2.waitKey(30) 0xFF ord(q): break因?yàn)橛成浔砻繋家匦律蛇@里的計(jì)算性能就更重要了。用向量化方式生成1080P的映射表一幀大概10-20ms配合remap本身的耗時(shí)整體能跑到25fps左右實(shí)時(shí)視頻用是夠的。6.2 結(jié)合圖像拼接做全景效果球形變換和魚眼照片校正有著天然的血緣關(guān)系。如果你手里有一批用廣角鏡頭拍的照片想拼成全景圖很多場景下第一步就是把每張圖先做球形變換把圖片投影到球面坐標(biāo)系再使用cv2.Stitcher拼接。這個(gè)過程本質(zhì)上是利用球形變換把平面圖的透視變形消除讓相鄰照片之間更容易找到匹配關(guān)系。我自己做過一個(gè)簡單的360度全景拼接demo效果雖然不如商業(yè)軟件那么完美但理論鏈路完全跑通。6.3 用隨機(jī)擾動(dòng)映射做藝術(shù)特效扭曲變換中除了正弦波你還可以引入隨機(jī)噪聲。比如用np.random.randn(h, w)生成高斯隨機(jī)偏移場再疊加到坐標(biāo)上圖像就會(huì)產(chǎn)生一種類似“油墨在水里化開”的抖動(dòng)效果。如果擔(dān)心隨機(jī)噪聲太過于混亂可以先用cv2.GaussianBlur對噪聲做平滑讓偏移更柔和。這種玩法非常適合做頭像特效、封面圖設(shè)計(jì)。老實(shí)講OpenCV的幾何變換體系遠(yuǎn)不止今天聊的這三種。理解了remap背后的“映射表”思想你就掌握了這一類特效的萬能鑰匙——不管是圓柱面投影、極坐標(biāo)轉(zhuǎn)換、拱形變形、透鏡畸變模擬本質(zhì)上都是往映射表里填不同的公式。希望這篇文章能幫你把這一塊的知識(shí)點(diǎn)徹底打通下次遇到“想把圖片變個(gè)形”的需求不再是到處找現(xiàn)成濾鏡而是自己動(dòng)手寫一個(gè)出來。最后分享一個(gè)我自己的使用習(xí)慣日常做圖像特效處理時(shí)只把算法核心留在代碼里參數(shù)全部放到配置文件或者GUI滑條上。做研究和調(diào)參階段用滑條實(shí)時(shí)預(yù)覽找到滿意參數(shù)后再固定到代碼中。這套流程看起來慢實(shí)際能幫你省下大量反復(fù)改參數(shù)的時(shí)間。如果你體驗(yàn)下來有更好的調(diào)參思路也歡迎自己折騰圖像特效這塊最大的樂趣就是能反復(fù)試、反復(fù)玩一個(gè)公式改動(dòng)一點(diǎn)點(diǎn)出來的效果完全不一樣。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
五月婷婷综合热| 婷婷在线网| 午夜丁香综合婷婷| 六月天婷婷| 99热只有精品综合| 五月天激情美女久久| 亚洲国产va| 91人碰| 婷婷五月天奸女| 亚洲免费观看高清完整版AV线| 亚洲99热| 婷婷五月天手机版视频| 日韩成人中文字幕| 无码视频国内精品久久久| 久草xx性爱视频| 久久一操| 色婷婷性爱网| 成人看片网站| 丁香婷婷综合激情五月色| 99热这里只要精品免费| 精品99在线| 五月婷婷丁香| 久久久国产精品黄毛片| 五月婷在线| 99久在线视频| 九一九九黄色| 欧美性猛交99久久久久99按摩| 内射激情在线| 亚洲综合视频天天精品| 狠狠久综合| 色婷婷影院| www99热| 日日爱678| 伊人五月婷| 五月花在线观看视频| 久久99精品久久久久子伦| 五月婷婷婷婷| 91色综合网| 天天拍夜夜爽| 69人人操人人爽| 生活片五区| www激情网| 欧美丁香五月97色| 一起草Av| 中文av网| 色综合色综合色综合| 丁香婷婷六月婷婷六月婷婷六月婷婷| 91丨九色丨白浆秘| 91在线看片| 丁香九月婷婷| 久热91| 婷婷欧美色| 99热黄| 91丨九色丨大屁股| 五月激情综合网| 日欧大屏操| 国产又色又爽又黄又免费| 黄色五月婷婷| 国产成人+综合亚洲+天堂| 婷婷五月天情色| 五月天伊人综合| 丁香亚洲婷婷五月| site:ornaments52.com| 国际国外精品欧洲南美洲专区无码不卡| 91婷婷色五月| 婷婷偷拍网| 激情四射网| 久热免费视频| 色情五月丁香| 琪琪色综合网站| 欧美大片| 大香AV| 极品少妇婷婷五月| 大香蕉娱乐| 人妻有码乱操| 91久久综合| 国产成人精品亚洲线观看| 色婷婷狠| 色色热| 五月婷婷|欧美| 人人摸人人澡人人| 色色色综合色| 99在线精品免费视频| 五月婷视频| 色色激情五月天| 激情综合在线观看| 少妇水多A片太爽了| 涩涩五月天| 日韩啪啪视频| 国产高潮白浆一区二区| 超碰在线观看9| 综合性爱网| 久久9久久| 中文字幕AV网址| 九九碰九九爱97| 激情五月婷婷丁香六月| 狠狠操在线视频| av中文网站| 久久婷婷综合五月趴| 久热A| 五月丁香婷婷色色| 成人欧美Va| 五月婷婷婷婷婷婷艺术| 久久丁香五月天| 夜夜骑操AV| 久久人妻情侣| 九九色欲网| 99热精品在线| 婷婷综合玖玖五月| www色综合亚洲92| 久久影视婷婷五月| 五月婷高清视频| 五月天婷婷视频30| 99热综合| 色九九丁香九月色九九色| 丁香五月成人丝袜| 综合性视频99| 99热这里只有精品官网| 免费视频99| 婷婷五月天淫荡| 看全色黄大色大片| 亚洲综合在线丁香五月| 九九热黄色| 成熟妇人A片免费看网站| 婷婷丁香久久网| 99 re视频一区| 激情五月天色| 久久丝袜婷婷| 99精品丰满| 婷婷综合网| 色五月婷婷啪啪五月| 97碰碰视频| 欧美成人精品A片免费一区99| 丁香操逼| 米奇激情婷婷| 一本色道久久综合狠狠躁小说| 五月婷A V在线| 丁香五月激情图片婷婷| 激情综合网五月在线播放| 国产精品-91JQ就要激情网91JQ6.91JQ27.CASA:16888 | 九九99一区| 91婷婷| 亚洲网站观看视频| 色综合久久88色综合天天人守婷| 亚洲AV成人片无码网站| 久9久成人精品视频| 97久久香草精品视频| 狠狠色五月| 中字幕视频在线永久在线观看免费| 色噜久| 亚洲小说欧美激情| 99热这里是精品| 婷婷五月激情丁香激情| 婷婷狠狠干| 伊人五月天97| 久久精品这里只有精品免费首页| 精品9l九九九九九77777| 五月丁香六月婷婷综合在线| 亚洲综合九九| 亚洲AV综合在线观看| 五月综合激情视频在线| 综合日本婷婷| 国产精品蜜臀99| 激情五月综合网| 在线网黄| 97久久草草超级碰碰碰| 激情综合婷婷| 激情综合五月婷婷| 色综合中文色综合网| 久久这里只有欧美| 亚洲另类AV| 天天爽天天草| 日本一级大片| 欧美激情VA永久在线播放| 68热超碰在线| 免费亚洲婷婷| 婷婷综合色图| 色色热| 天天摸.天天mo| 色婷婷狠狠18禁| 伊久久婷婷| 丁香五月婷婷六月丁香| 一区二区免费看| 色色色地址| 丁香五月黄色| 91chinese在线| 色99热| 婷婷丁香五月婷婷| 超碰在线人妻| 国产乱子轮XXX农村| www.久久五月天.com| 五月天成人免费视频| 99热99网| 黄色中文字目| 天天综合色| 激情五月天99色| 91视频综合网| 色黑鬼导航| 99在线观看| 99热99成人| 激情综合久久| 色爱终和网| 97超碰色| 九九AV| 久久一热免费视频| 九九99九九精品视频| 五月婷婷六月婷| 97成人视频| 亚洲五月停停| 99久久成人| 99热欲| xxx.色婷婷| 五月丁香婷中文| 天天日,天天插| 十月丁香婷婷| 久久久欧美精品sm网站| 九九久久精品| 婷婷开心激情| 色五月婷婷久久爱| www综合久久| 亚洲人妻av| 操日本三片99| 9|人妻人人操| 丁香五月天激情综合| 伍月婷婷免费视频| cao久久| 久操操| 婷婷五月情天| 中文久久久人妻| 色亭亭丁香五月天| 色婷婷小说| 精a品a| 久久五月婷婷电影| 日本九九视频| 欧美婷婷| 大香蕉婷婷丁香视频在线| 丁香五月天激情五月天激情五月天激情网 | 伊人激情网| 欧美婷婷丁香五月社区| 熟女激情五月天 | www.99操| 婷婷五月天综合亚洲| 色色日本欧美| 亚洲第一综合| 九九99一区| 婷婷97狠狠干| 1024国产| 玖玖婷婷五月| 久久婷婷亚洲无码一起| 亚洲V国产V欧美V久久久久久| 五月天激情AV| 色噜综| 99热香港| 五月天社区婷婷| 丁香五月婷婷五月天| 天天拍天天做视频| 成年AAAA色情| 丁香六月婷婷| 99成人网一区| 久久99综合| 九月av在线| 五月婷婷操操| 亚洲亚洲人成综合网络 | 超碰在线看| 色五月首页| 国产va在线视频| 操一区| 99久热精品在线| 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 激情五月图| 国产精品美女| 九九色大香蕉| 91操人| 69久久99精品久久久久| 亚洲热久| 五月激情婷婷国产精品久久久久久| 亚洲精品第一国产综合亚AV| 在线一起草av| 九九久久污| 国产真人做爰视频免费| 粉嫩AV久久一区二区三区| 91日本在线观看| 天天日天天爱天天噪| 九热视频这里只有精品| 婷婷五月激情视频| 五月丁香六月婷婷色情| 狠狠色97| 九九色综合九九色| 熟妇无码乱子成人精品| 日韩黄在免| 久久久天堂国产精品女人| 婷婷导航| 亚洲乱码日产精品BD| 七月婷婷色香综合网| 99re久久| 岛国AAAV| 黄色一级影片| 99婷婷五月天| 婷婷激情五月天小说校园| 五月天狠狠干| 伊人在线视频| 色五月天在线观看| 五月激情啪啪| 激情五月婷婷丁香综合网| 91九色偷拍| 欧美六月婷婷| 丁香五月天在线观看视频| 国内久久亭亭| 六月激情婷婷色| 婷婷五月精品在线| 99爱视频| 久久99热这里只频精品6学生| 天天干天天日天天操| 99热精品中文字幕| 婷婷开心六月| 91丨九色丨熟女|新版| www色色com| 五月丁香影院| 久久五月天免费网站| 欧美va视频| oumeisesewang| 色婷婷影| 99热99日天天干| 99人人操人人操人人精| 丁香五月色色| 亚洲色色香蕉| 五月天综合| 五月天大香蕉| 人人操婷婷| 五月婷婷影院| 噜噜色噜噜网| 国产在线aaa片一区二区99| 十月色综合| 婷婷娌伦网| 婷婷五月天社区| 欧美色必爱| 色婷婷五月影视| 久久久WWW| 激情五月婷婷中文字幕| 五月天婷婷在线AN| 五月婷婷六月丁香首页| 五月婷婷六月天| 丁香狠狠| 79精品视频在线观看,| 五月丁香人妻| 强伦轩人妻一区二区电影| 99精品视频在线免费观看| 久99久热只有精品国产99| 99久精品视频| 99干在线| 亚洲色婷婷视频| 激情网五月天| 五月丁香香蕉| 97色色综合| 美女激情综合| 欧美婷婷综合网| 亚洲综合成人网| 亚洲成人九九九| 亚洲人人干| 激情五月丁香六月综合AVXXXX| 久久婷青青草原| 视频一二区| 狠狠撸激情综合丁香五月天俺来啦| 久久综合五月天| 99婷婷色| 色综合中文色综合网| 五月开心深深爱激情综合| 天天色色天天| 另类图片天天影视在线观看| 中文字幕人妻在线| 天啪色| 婷婷香五月综合激情| 少妇综合网| 婷婷伊人久久| 婷婷天堂站| 亚洲成人超碰| 五月婷婷亚洲| 六月婷婷久久| 欧美性猛交99久久久99| 91色逼| 日日操天天爽| 91久久日日| 成人五月天在线视频在线观看| 99ri国产| 只有精品在线观看| 亚洲天堂99| 国产伦理精品高清在线观看网站一区二区| 五月激情六月宗合| 婷婷久久午夜网| 丁香五月婷婷基地| 噜噜噜噜噜日本视频| 夜夜操狠狠操| 草草女人亚洲| 亚州精品色情无码A片| 伊人久久婷婷| AAAA亚洲| 北条麻妃伊人 | 日日干综合| 亚洲V国产V欧美V久久久久久| 综合亚洲六月婷婷在线| 成人国产欧美大片一区| 色色AV色色色东莞| 久久9精品| 色色99| 亚洲 在线 性爱 | 丁香久月| 日韩啪啪网| 亚洲婷婷在线播放十月| 久久精品A片777777| 天天肏天天爽夜夜爽| 国产精品 的国产| 六月婷婷av| 99热人人| 99精品视频播放| 激情五月六月婷婷| 噜噜狠狠| 亚洲99一级无嗎特制在线| 五月婷婷官网色| 大香蕉七区| 日韩九区| 新激情五月开心五月婷婷五月丁香五月| 懂色av粉嫩av蜜臀av| 亚洲国产成人裸舞| 五月婷婷影院| 97久久婷婷色| 囯产精品久久欠久久久久久九大| 99综合免费视频| 综合玖玖偷拍| 色色色999| 丁香5月婷婷| 国产97色在线 | 日韩| 丁香五月婷婷色五月| 3p九色在线| 日本九九视频| 开心五月色婷婷综合开心网| 九九99精品| 在线看的免费网站| 91日日日| 思思久热6| 五月丁香久久网| 亚洲精品久久久无码| 99综合网| 婷婷五月丁香久久| 97在线视频 欧美| 成人短视频在线观看| 天天综合天综合| 日韩色色网| 黄色99热| 婷婷五月色天| www.婷婷五月天.com| 天天看片日日夜夜| 欧洲亚洲免费视频9| 九色视频九色九色91jiuseshipin| 9久久精品| 丁香婷婷婷| 五月天激情婷婷| 99在线精品免费视频| 丁香香五月激情免费视频| 色色色色色五月| 性爱激情五月| 久久视频在线视频| 亚洲精品一区中文字幕乱码| 欧美色色色色色| 六月婷婷五月丁香首页| 九九综合色| 丁香六月激情国产| 日本99在线视频| 五月婷婷丁香在线视频| 五月丁香综合伦理片| 91成人品| 色综合婷婷| 丁香五月WWW| 一二线视频 另类| 人妻久久久| 激情五月婷婷丁香综合网| 99热99色| 五月丁香激情综合| 操碰久| 七七久久综合| 特黄三级又爽又粗又大| www91色网站| 九九九九九九九九九九九九九九九九九九九在线视频 | 亚洲va成人va成人va在线观看| 天天操天天操| 久久亚洲A| AV操逼网| 婷婷五月天AV| 99视频超级精品| 色婷婷综合久久久久| 九月激情综合| 国产91视频| 久久婷婷国产| 天天日天天插天天操| 色9999日韩国产| 99精品热视频| 日本本土色网第一区| 国产激情综合五月久久| 亚洲无码成人网| 看黄的网站18禁| 五月总合激情网| 五月激情射| 婷婷五月天丁香社区| 91色操| 激情骚五月| 日韩精品一区二区刘| 成片免费观看大全| 亚洲婷婷五月| www.激情五月天.con| 激情伊人网| 大香蕉久久久久| 99riAv1国产在线观看| 不卡成人免费| 九月色婷婷综合| 大香蕉九九操| 综合狠狠伊人| 天天久久综合| 五月天成人在线视频网站| 激情五月天在线免费美女视频| 天天舔天天操| 狠狠色噜噜狠狠| 碰97久久| 久久九区| 丁香五月玖玖| 成人AV免费观看| 欧美va国产va| 热久久视频99| 婷婷天堂综合| 人人插操| 久久9久久| 婷婷五月综合婷婷| 天天摸天天透天天舔| 国产免费一区二区三州老师F1F1| 丁香五月综合| 日韩黄色影院| 激情丁香社区| 激情五月丁香色婷婷| 五月丁查人人| 婷婷99狠狠| 狠狠穞A片一區二區三區| 久操人| 久久综合站| 色色五月综合| 99热思思在线观看| 99九九视频精彩在线| 超碰91在线| 五月婷久草| 99ri在线| 人人视频人人干人人做| 亚洲亚洲人成综合网络| 天天日夜夜欢| 久久er九九| 欧洲色色| 大香蕉福利导航| 日操夜操天天操不卡| 成人噜噜网| 伊人啪啪网| 天天操婷婷| 色爱综合五月| 五月婷婷六月爱| 天天人人人人人人人人人人人| 婷婷狠狠操| 九九99男女视频在线观看| 桃色激情婷婷伊人网| 欧美超级视频97| 夜夜爽77777妓女免费下载| 亚洲视频国产一区| 丁香六月激情国产| 五月婷婷网五月在线| 色婷婷网| 另类视在线| www一区二区三区| 久久久GOGO无码啪啪艺术| 丁香六月激情四射| 国产va视频| 北条麻妃伊人 | 狠狠香婷婷五月| 久久婷婷久久| 无码人妻AV久久久一区二区三区 | 九九热99在线视频| 四色AVwww| 99久久国产宗和精品1上映| 伊人久久婷婷| 97人妻碰碰中文无码久热丝袜| 99久久超级| 午夜 外网 精品 在线| 91九色熟女| 伊人久久大香天蕉亚洲特级| 五月天婷婷综合免费| 91久久久久久久久久18| 色九月综合网| 六月丁香花婷婷| 99精品小视频| 欧美在线视频9| 婷婷五月天电影区小说区| 婷婷五月丁香图片人人操| 五月综合激情图片| 成人做爰A片免费看视频| 日本三级中国三级99人妇网站| 亚洲av日韩无码| 人妻激情综合| 亚洲综合在线视频| 91丨九色丨国产打屁股| 亚洲中文字幕AV| 五月天婷a| 五月天激情网站| 那里有AV网址| 99色天堂| 男女久久婷婷五月天| 亚洲日韩乱码一区二区三区四区| 五月婷婷就去色| 久久婷婷丁香花综合网| 中文字幕日韩无码制服诱或| 9色91视频| 五月丁香亚洲婷婷| 色综合偷拍| 99riAv1国产在线观看| 97丁香婷婷| 成片免费播放| 日韩十国产极品久久| 六月婷婷AV| 九九re精品视频在线观看| 婷婷丁香五月亚洲欧美| 综合99在线| 九九色婷婷| 天天色综合网吨吧| 五月天婷婷三级黄| 玖玖爱导航| 91狠狠色色丁香婷婷综合久久| 亚洲午夜av| 久久久天堂国产精品女人| A网在线欧洲| www激情网站| 91九色精品熟女内射| 一本久久亚洲五月婷婷| 五月婷婷玖玖综合玖玖爱| 深爱五月激情五月| 99色这里| 99 福利 导航| BBWCUCKOLD精品熟妇| 五月丁香五月婷婷在线观看| 色婷婷五月天av在线| 97搞在线| 丁香婷婷深情五月亚洲| 亚洲天天综合| 五月天婷婷av| 久久99免费视屏| 婷婷五月天av| 激情综合色图| 这里只有精品在线看| 五月激情婷婷综合| 熟妇天天综合| 激情婷婷五月天| 9久热在线视频精品| 激情五月丁香激情综合网| 五月天激情啪啪| 九九九九操逼| 日本三级中国三级99| 婷婷色网站| 99久热这里只有精品视频删减版| 91久久免费| 就去色色五月丁香婷婷久久久| 伊人激情AV一区二区三区| 色色亚洲五月天| 欧洲毛片基地c区| 久久综合影院| 久久99激情| 丁XX 成人| 五月婷婷色五月| 久久精品视频在这里有| 5月婷婷激情网| 婷婷丁香在线播放| 中国激情网| 丁香五月综合亚洲| 婷婷五月丁香网| 五月婷婷网站| 五月天婷婷亚洲| 五月婷婷香| 五月久视频| 色久丁香五| 狠狠色噜噜狠狠| 久久久.COM| 午夜免费试看| 色色色99| 婷婷欠久少妇| 久操大屁股女人av| 久一网站| 7月婷婷六月丁香| 五月丁香日本片| 99色色网站| 五月天婷爱综合| 岛国AV网站| 91se在线观看| 丁香五月天堂| 免费无码毛片一区二区A片| 激情婷婷丁香| 在线看av| 26UUU一区二区| 激情丁香五月激情婷婷| 99无码黄色视频| 操日视频| 国产毛多水多女人A片| 青青久久五月| 任我鲁这里有精品视频| 99精品无码视频| 5月丁香六月情| 午夜丁香婷婷| 99久视频| 久久久.www| 婷婷五月大香蕉| 丁香激惜男女| 99热这里只| 色综合激情| 99综合五月免费视频色婷婷| 91人人澡人人爽人人看| 九九热这里有精品23| 婷婷丁香五月高清| 大香蕉av在线| 色亭亭九月| 午夜亚洲国产精品av一区二区| 亚洲激情无码久久| 婷婷激情综合| 国产av天堂| 婷色视频| 26uuu国产精品| 啪啪色区| 狠狠爱成人综合网| 日夜操B| 五月亭亭激情综合| 99色热视频| 色婷婷综合久久| 色综合久久天天综合网| 色色色色av777| 99久久久免费| 亚洲AV电影美洲AV电影| 五月婷婷天天色| 热99这就是精品视频| 99啪啪视频| 五月天丁香婷婷社区| 狠狠色狠狠鲁| 激情综合网五月激情| wuyuedingxiang| 国庆精品久久| 伊人激情综合网| 婷婷99狠| 丁香5月啪啪| 丁香五月婷婷啪啪| 九月婷婷在线观看| 久久 这里只有精品1| 九九99精品视频在线观看| 五月婷婷之综合激情在线| 婷婷成人综合免费视频| 操操啪| 五月天婷婷情色| 丁香六月亭亭久久综合| 久久婷婷五月综合| 天天色播| 日韩啪| 婷婷色片| 色播播五月| 五月丁香另类网| 五月丁香成人版| 99婷婷| 99精品视频免费在线播放| 色婷婷先锋| 丁香六月青青草| 丁香六月婷婷姐网| 97大香蕉五月天| 精品99爱免费视频在线观看| 色婷婷综合网| wuyuedingxiang99| 婷婷综合视频| 亚洲婷婷丁香五月在线| 国产在这里只有精品| 九九热自拍| 日本啪啪网| 日韩成人电影在线播放| 亚洲午夜电影| 日韩久综合| 亚洲日日日| 玖玖综合玖玖| 久久黄色片| 亚洲天堂制| 99无吗| www,99色| 亚洲色五月婷婷| 久久99看免费| 人人综合久| 精品久久9| 97色干| 黄色99视频| 99热精品在线| 五月婷婷色情| 九九九九中文字幕| 五月狠狠| 日韩小视频在线99| 欧美怡红院黄站| 538在线精品| av在线免费网站| caobi四区| 极骚大香蕉伊人| 深爱激情六月| 99九九中文字幕视频| 99热大香蕉| 五月丁香六月婷婷啪啪综合 | 日日操夜夜操中国无码| 久久爱婷婷| 丁香五月91| 99热久| 五月丁香999| 婷婷五月精品| 操操天堂| 婷婷五月天激情在线观看 | 被强行糟蹋的女人A片| 婷婷四色成人综合色视| 五月开心啪啪| 婷婷丁香在线| 亚洲激情视频网| 99天堂网最新| 天天干天天操天天爽| 99综合99| 五月丁香激情综合六月涩涩爱| 91狠狠综合久久| 岛国av网| 亚洲色图五月丁香| 粉嫩AV久久一区二区三区| 夜夜操天天干| 人人人操Av| 99精品丰满| AV九九| 丁香美女主播视频在线观看| 涩综合网| 97操碰98| 九九99久久| 天天插插天天| 欧洲激情网站| 丁香九月综合在线| 婷婷99狠狠躁天天躁| 色中色综合| 26UUU成人网| 亚洲顶级VA在线观看-高清完整版在线影院观看-S022AV | 色五月涩涩婷婷蜜桃| 亚州婷婷五月激情综合| 亚洲精品久久久久久久久久吃药| www.操.com| 狠狠搞综合色| 91色综合| 激情性爱网站| 亚洲精品又粗又大又爽A片| 欧美久久网| 开心五月综合| 五月天综合缴情网网站0| 亚洲精品网址| 玖玖婷婷免费| 69精品人人人人| av在线免费网站| 婷婷伊人五月| 综合激情五月丁香9999久久精| 五月天之色情综合网| 610018岁成人视频| 大香蕉婷婷| 五月天丁香| 亚洲色模骚货| 99热只有国产在线精品| 色婷婷五月天av在线| 婷婷成人AV| 久久婷婷桃花五月天| 亚洲亚洲人成综合网络| 天天干天天干天天操| 国产精品国产| 99九九精品| 五月婷婷无码专区| 婷婷五月天成人动漫 | 思思99热| 91久久婷婷| 激情图片婷婷丁香五月| 五月丁香婷婷成人网| 成 久久| 色999五月色| 色一区高清| 狠狠色色| 操人91| 97干欧美| 激情五月综合网最新| 久热超碰91| 五月天婷婷狠狠| 亚州婷婷五月激情综合| 亚洲色区17| 久9精品视频在线| 成人 在线观看国产| 99国产在线精品视频| 专区无日本视频高清8| 九九99精品视频在线观看| 色播五月| 亚洲欧美成人在线| 丁香九月激情| EEUSS鲁片一区二区三区| 人妻AV在线| 丁香五月成人| 四川BBB搡BBB爽爽视频| 色欲一区二区三区精品A片| 99成人| 亚洲国产精品VA在线看黑人| 99网| 色色欧美色色色| WWW嗯嗯啊啊啊啊| 九九色插| 99色日本| 99ri在线| 五五月丁香花激情综合网| 99视频精品视频| 亚洲爱爱无码婷婷色五月| 去干网最新版本亚洲版| 色五月在线视频观看| 六月激情婷婷| 影音先锋四区| 337p大胆噜噜噜噜噜91Av| 亚洲日韩一页精品发布| 激情性爱五月天网页| 嫩草视频| 亚洲六月色婷婷| 精a品a视a频| 99色热视频| WWW五月| 五月丁香婷婷综合久久| 五月色综合| 教师性爱毛片| 久久九九@| 色播五月婷婷综合| 久久久人妻门| 亚洲视频操| 五月婷婷六月激情| www色哟哟| 欧美日本黄色| 99热国产国产| 夜夜夜夜夜骑撸| 九九色热| 欧美黄色一级录像| 婷婷99狠狠躁天天躁中文| 97成人丁香婷婷| 天天夜天天色天天| 久久久久亚洲AV无码网影音先锋| 九九精品免费| 奇米色大香蕉| 五月丁香网视频| 中文字幕性爱丰满| 99人碰碰碰| 天堂成人A片永久免费网站| 99干在线| 精品国产人人爱人人| 日日夜夜爽| 九九热在线观看视频| 91日婷婷在线| 亚洲综合在线伊人婷| 九九热这里只有精品31| 五月激情啪啪啪| 九久九精品| 五月婷婷六月丁香| 操人妻视频91| 99热这里只有精品99| 99在线视频女女视频| 亚洲开心激情网| 中文色婷婷| 91呦呦呦| 亚洲第一色网站| 久久婷婷亚洲| 日本人人超碰| 久久五月婷| 婷香五月激情视频| 国产乱人偷精品人妻A片| 婷婷五月综激情| 天天做 天天爱| 色色五月天激情| 丁香婷婷五月色成人网站| 九九久久视频| 日本色婷婷| 99热综合在线| 天天爽天天爽视频| 国产精品激情AV久久久青桔| 91丨九色丨白浆秘| 99爱在线视频观看| 日本精品人妻无码77777| www九九| 天天天天干| 在线观看视频1区| 激情欧美婷五月| 色色色色色色色色网站| 操日本三片99| 六月丁香影院| 中文字幕乱码亚洲精品一区| 欧美性爱五月天| 亚洲秘 无码一区二区三区妃光/1| 久久婷婷超碰| 亚洲久久婷婷丁香五月天| 欧美25p| 噜噜噜狠狠色综| 天堂综合久久| 婷婷久久五月天中文字幕在线观看| 深爱激情五月天婷婷网| 九九热免费视频| 天天五月香欧美| 俺去也五月天婷婷| 婷婷无码视频| 五月婷六月| 天天插天天射天天干| 婷婷成年人免费视频| 91啦丨九色丨刺激中文| 色婷婷在线视频综合| 激情内射人妻1区2区3区| 激情com| 午夜天堂啪啪| 色欲Av五月天| 久久久久久人妻| 国产夫妻操逼内射视频| 99欧美| 久久人妻爱爱| 国产FREESEXVIDEOS性中国| 丁香五月婷婷性爱| 五月婷婷综合在线| 六月色婷婷欧美| 白人荫道BBWBBB大荫道| 色色丁香五月婷婷| 亚洲视频综合网| 99成人小视频| 99啪在线视频| 亚洲精品在线视频| 丁香五月婷婷黑人妻黄色电影院| 色色五月丁香| 综合久久婷婷五月丁香| 8090在线影视少妇| 只有久久精品免费| 婷婷六月丁综合| 亚洲精品在线视频| 久热婷婷| 激情婷婷| 激情五月亚洲| 成人VAV视频在线观看| 婷婷久久婷婷色五月| 婷婷五月天狠狠| 婷婷五月天网址| 97色婷| 婷婷激情综合色五月久久,色婷婷丁香花,丁香婷婷五月情天,久久婷婷五月综合色 | 99久久精品国产色欲| 美女网黄| 五月丁香啪啪啪| 99热99热99热99热| 91视频五月丁香| 欧洲色色| 人人操人人爱丁香五月| 影音先锋 一区| 亚洲热热视频| 亚洲色色色色| 久久在线92| 色婷五月| 丁香六月成人| 九九亚洲视频| 天天揷综合网| 激情五月色婷婷| 色情·com| 狠狠综合久久综合| 日本三级大片| 色五月色五天色情网| 五月婷婷色播| 亚洲精品又粗又大又爽A片| 激情综合色婷婷六月天| 伊人干综合| 九月丁香久久网| 五月丁香婷婷色色色| 五月激情网五月综合网| 99日在线观看视频| 六月婷婷色综合| 丁香五月天激情视频| 99er这里只有精品| 九九热99精品| 国产67194| 久久视频这里99| 五月丁香六月激情综合网| 99在线看视频| 色五月婷婷五月天| 狠狠草狠狠草| 天天人人天天爽| www.maotanji.com| 99热爆在线| 夜夜操天天干| 人人爱人人摸人人澡| 天天激情综合| 五月亭亭欧美女人| 性欧美大战久久久久久久83| 激情另类综合| 五月婷婷 激情五月| 这里只有精品视频国产| 日韩超碰在线| 婷婷五月天亚洲综合网| 激情丁香五月| 99玖玖免费视频| 九月丁香五月婷婷| 凹凸探花电影| 久热 91| 六月丁香婷婷综合影院| 五月婷婷爽爽爽| 99精品视频免费观看| 99精品网| 思思热久久婷婷五月天| 五月婷丁香花| 五月天婷婷操逼视频| 婷婷五月丁香成人网| 天天草天天爽| 久久精品视频99| 天天爽天天干| 天天插AV丝袜中| 四色女婷婷| 玖玖色资源站| 婷香五月网在线| 九热视频在线精品15| 亚洲天堂九九九| 伊久大香蕉| 中国丰满熟女A片免费观| 天天日,天天插| 婷婷五月电影院| 中文字幕丰满人妻无码专区| 婷婷六月丁香五月| 五月婷婷久草在线视频综合| 婷婷六月中文字幕| 狠狠操天天操综合| 热无码A∨| 人人色人人摸人人看| 久久五月视频| 国产成人av在线| www.99热在线观看| 亚洲网站999| 啪啪 综合网| 91婷婷色| 97极品在线| 久久久久久99精品无码| 亚洲狠狠婷婷| pom538精品视频| 99精品国产在热久久婷婷| a在线免费v| 久久婷婷久久| 激情五月综合网最新| 在线婷婷| 热九九在线| 色色色在线播放| 丁香五月天色| 五月天开心色情网| 丁香五月天五码婷婷| 五月婷婷丁香av| 五月天激情AV| 亚洲色婷婷五月天| 久综合| 九月色婷婷| 性爱综合网| 日韩AV免费电影在线播放| 五月婷婷丁香日韩在线| 色爱爱综合网| 日韩国产在线免费观看| 9久热在线视频精品| 99人人干| 思思久ren热| 五月婷综合网| 婷婷婷婷婷婷婷婷| 超碰成人电影| 婷婷激情综合网| 中国操逼99| 人人操人人添人人摸97| 亚洲免费观看高清完整版AV线| 久婷| 99热欧| 性色99| 五月激情小说| 五月激情站| www,奇米影视| 99啪在线视频| 色婷婷狠狠| 开心激情站婷婷五月天| 很很干天天干| 九九热视频精品| 男人操女人高潮91视频| 玖玖综合玖玖| 五月婷成人| 婷婷色色综合| 欧美日韩成人在线网站| 人妻射精AV| 色丁香六月| 五月婷婷av| 五月Huangsewang| 丁香五月先锋| 婷婷五月天六月综合| www.久热| 99热9| 性爱七区| 九九精品这里只有| 婷婷六月综合激情| 9久热| 婷色视频| 五月婷婷视频啪啪美女| 亚洲五月花| 久久99久久99久久99人受| 香蕉五月婷婷| 九九视频免费| 色综合久久88色综合天天99| 久久激情网| 一起草av在线观看| 亚洲婷婷五月草久| 激情视频综合| 精品成人在线| 91中文在线| 色婷狠狠| 综合天堂AV久久久久久久| 日本啪啪网| 深爱激情69热| 国产成人+综合亚洲+天堂| 婷婷综合偷拍| 丁香花五月天| 一起草AV| 日本九九网| 婷婷五月天首页| 国产成人+综合亚洲+天堂| 九九精品热播| 青青草原福利在线| 午夜性做爰电影| 丁香婷婷基地| 久久爱婷婷| 久777| 99精品这里只有免费视频| 久久婷婷五月综合伊人| 亚洲人成网站999综合| 久色成人| 婷婷激情五月综合基地| www激情| 国产精品国产| 婷婷五月天激情综合深爱激情| 激情欧美丁香五月| 思思国产99| 久久五月婷6 9| 热的国产99热| 超碰人人草| 97性视频| 五月天激情综合| 综合五月激情| 亚洲 在线 性爱 | 丁香综合婷婷开心激情网| 97色色综合| 大香蕉人人网| 激情五月天激情综合网| 青青草伊人婷婷| 五月婷婷色丁香| 中文字幕成人| 五月婷婷六月丁香免费| 欧美性爱五月天| 天天操无码| www色五月| 热99精品视频五月| 激情久久久久久久久久| 影音先锋偷偷色男人站| 九九99久久| 丁香五月亚洲| 182tv992tv人之初午夜免费观看| 深爱激情网婷婷| 精品亚洲国产成人A片在线鸭王| 成人五月天在线观看| 综合网五月| 五月天色婷婷激情综合| 日日操夜夜撸| 五月丁香色婷婷伊人| www.五月天| 天天拍夜夜爽|