日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV之imgproc 模块. 图像处理(1)图像平滑处理 腐蚀与膨胀(Eroding and Dilating) 更多形态学变换 图像金字塔 基本的阈值操作

發布時間:2025/3/21 编程问答 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV之imgproc 模块. 图像处理(1)图像平滑处理 腐蚀与膨胀(Eroding and Dilating) 更多形态学变换 图像金字塔 基本的阈值操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

圖像平滑處理

目標

本教程教您怎樣使用各種線性濾波器對圖像進行平滑處理,相關OpenCV函數如下:

  • blur
  • GaussianBlur
  • medianBlur
  • bilateralFilter

原理

Note

?

以下原理來源于Richard Szeliski 的著作?Computer Vision: Algorithms and Applications?以及?Learning OpenCV

  • 平滑?也稱?模糊, 是一項簡單且使用頻率很高的圖像處理方法。

  • 平滑處理的用途有很多, 但是在本教程中我們僅僅關注它減少噪聲的功用 (其他用途在以后的教程中會接觸到)。

  • 平滑處理時需要用到一個?濾波器?。 最常用的濾波器是?線性?濾波器,線性濾波處理的輸出像素值 (i.e.?) 是輸入像素值 (i.e.?)的加權和 :

    ?稱為?核, 它僅僅是一個加權系數。

    不妨把?濾波器?想象成一個包含加權系數的窗口,當使用這個濾波器平滑處理圖像時,就把這個窗口滑過圖像。

  • 濾波器的種類有很多, 這里僅僅提及最常用的:

歸一化塊濾波器 (Normalized Box Filter)

  • 最簡單的濾波器, 輸出像素值是核窗口內像素值的?均值?( 所有像素加權系數相等)

  • 核如下:

高斯濾波器 (Gaussian Filter)

  • 最有用的濾波器 (盡管不是最快的)。 高斯濾波是將輸入數組的每一個像素點與?高斯內核?卷積將卷積和當作輸出像素值。

  • 還記得1維高斯函數的樣子嗎?

    假設圖像是1維的,那么觀察上圖,不難發現中間像素的加權系數是最大的, 周邊像素的加權系數隨著它們遠離中間像素的距離增大而逐漸減小。

Note

?

2維高斯函數可以表達為 :

其中??為均值 (峰值對應位置),??代表標準差 (變量??和 變量??各有一個均值,也各有一個標準差)

中值濾波器 (Median Filter)

中值濾波將圖像的每個像素用鄰域 (以當前像素為中心的正方形區域)像素的?中值?代替 。

雙邊濾波 (Bilateral Filter)

  • 目前我們了解的濾波器都是為了?平滑?圖像, 問題是有些時候這些濾波器不僅僅削弱了噪聲, 連帶著把邊緣也給磨掉了。 為避免這樣的情形 (至少在一定程度上 ), 我們可以使用雙邊濾波。
  • 類似于高斯濾波器,雙邊濾波器也給每一個鄰域像素分配一個加權系數。 這些加權系數包含兩個部分, 第一部分加權方式與高斯濾波一樣,第二部分的權重則取決于該鄰域像素與當前像素的灰度差值。
  • 詳細的解釋可以查看?鏈接

源碼

  • 本程序做什么?

    • 裝載一張圖像
    • 使用4種不同濾波器 (見原理部分) 并顯示平滑圖像
  • 下載代碼: 點擊?這里

  • 代碼一瞥:

#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp"using namespace std; using namespace cv;/// 全局變量 int DELAY_CAPTION = 1500; int DELAY_BLUR = 100; int MAX_KERNEL_LENGTH = 31;Mat src; Mat dst; char window_name[] = "Filter Demo 1";/// 函數申明 int display_caption( char* caption ); int display_dst( int delay );/** * main 函數 */int main( int argc, char** argv ){namedWindow( window_name, CV_WINDOW_AUTOSIZE );/// 載入原圖像src = imread( "../images/lena.jpg", 1 );if( display_caption( "Original Image" ) != 0 ) { return 0; }dst = src.clone();if( display_dst( DELAY_CAPTION ) != 0 ) { return 0; }/// 使用 均值平滑if( display_caption( "Homogeneous Blur" ) != 0 ) { return 0; }for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ){ blur( src, dst, Size( i, i ), Point(-1,-1) );if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }/// 使用高斯平滑if( display_caption( "Gaussian Blur" ) != 0 ) { return 0; }for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ){ GaussianBlur( src, dst, Size( i, i ), 0, 0 );if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }/// 使用中值平滑if( display_caption( "Median Blur" ) != 0 ) { return 0; }for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ){ medianBlur ( src, dst, i );if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }/// 使用雙邊平滑if( display_caption( "Bilateral Blur" ) != 0 ) { return 0; }for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ){ bilateralFilter ( src, dst, i, i*2, i/2 );if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }/// 等待用戶輸入display_caption( "End: Press a key!" );waitKey(0);return 0;}int display_caption( char* caption ){dst = Mat::zeros( src.size(), src.type() );putText( dst, caption,Point( src.cols/4, src.rows/2),CV_FONT_HERSHEY_COMPLEX, 1, Scalar(255, 255, 255) );imshow( window_name, dst );int c = waitKey( DELAY_CAPTION );if( c >= 0 ) { return -1; }return 0;}int display_dst( int delay ){imshow( window_name, dst );int c = waitKey ( delay );if( c >= 0 ) { return -1; }return 0;}

解釋

  • 下面看一看有關平滑的OpenCV函數,其余部分大家已經很熟了。

  • 歸一化塊濾波器:

    OpenCV函數?blur?執行了歸一化塊平滑操作。

    for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ){ blur( src, dst, Size( i, i ), Point(-1,-1) );if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }

    我們輸入4個實參 (詳細的解釋請參考 Reference):

    • src: 輸入圖像
    • dst: 輸出圖像
    • Size( w,h ): 定義內核大小(?w?像素寬度,?h?像素高度)
    • Point(-1, -1): 指定錨點位置(被平滑點), 如果是負值,取核的中心為錨點。
  • 高斯濾波器:

    OpenCV函數?GaussianBlur?執行高斯平滑 :

    for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ){ GaussianBlur( src, dst, Size( i, i ), 0, 0 );if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
  • 我們輸入4個實參 (詳細的解釋請參考 Reference):

    • src: 輸入圖像
    • dst: 輸出圖像
    • Size(w, h): 定義內核的大小(需要考慮的鄰域范圍)。??和??必須是正奇數,否則將使用??和?參數來計算內核大小。
    • : x 方向標準方差, 如果是??則??使用內核大小計算得到。
    • : y 方向標準方差, 如果是??則??使用內核大小計算得到。.
  • 中值濾波器:

    OpenCV函數?medianBlur?執行中值濾波操作:

    for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ){ medianBlur ( src, dst, i );if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }

    我們用了3個參數:

    • src: 輸入圖像
    • dst: 輸出圖像, 必須與?src?相同類型
    • i: 內核大小 (只需一個值,因為我們使用正方形窗口),必須為奇數。
  • 雙邊濾波器

    OpenCV函數?bilateralFilter?執行雙邊濾波操作:

    for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ){ bilateralFilter ( src, dst, i, i*2, i/2 );if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }

    我們使用了5個參數:

    • src: 輸入圖像
    • dst: 輸出圖像
    • d: 像素的鄰域直徑
    • : 顏色空間的標準方差
    • : 坐標空間的標準方差(像素單位)
  • 結果

    • 程序顯示了原始圖像(?lena.jpg) 和使用4種濾波器之后的效果圖。

    • 這里顯示的是使用?中值濾波?之后的效果圖:




    腐蝕與膨脹(Eroding and Dilating)

    目標

    本文檔嘗試解答如下問題:

    • 如何使用OpenCV提供的兩種最基本的形態學操作,腐蝕與膨脹( Erosion 與 Dilation):
      • erode
      • dilate

    原理

    Note

    ?

    以下內容來自于Bradski和Kaehler的大作:?Learning OpenCV?.

    形態學操作

    • 簡單來講,形態學操作就是基于形狀的一系列圖像處理操作。通過將?結構元素?作用于輸入圖像來產生輸出圖像。

    • 最基本的形態學操作有二:腐蝕與膨脹(Erosion 與 Dilation)。 他們的運用廣泛:

      • 消除噪聲
      • 分割(isolate)獨立的圖像元素,以及連接(join)相鄰的元素。
      • 尋找圖像中的明顯的極大值區域或極小值區域。
    • 通過以下圖像,我們簡要來討論一下膨脹與腐蝕操作(譯者注:注意這張圖像中的字母為黑色,背景為白色,而不是一般意義的背景為黑色,前景為白色):

    膨脹

    • 此操作將圖像??與任意形狀的內核 (),通常為正方形或圓形,進行卷積。

    • 內核??有一個可定義的?錨點, 通常定義為內核中心點。

    • 進行膨脹操作時,將內核??劃過圖像,將內核??覆蓋區域的最大相素值提取,并代替錨點位置的相素。顯然,這一最大化操作將會導致圖像中的亮區開始”擴展” (因此有了術語膨脹?dilation?)。對上圖采用膨脹操作我們得到:

    背景(白色)膨脹,而黑色字母縮小了。

    腐蝕

    • 腐蝕在形態學操作家族里是膨脹操作的孿生姐妹。它提取的是內核覆蓋下的相素最小值。

    • 進行腐蝕操作時,將內核??劃過圖像,將內核??覆蓋區域的最小相素值提取,并代替錨點位置的相素。

    • 以與膨脹相同的圖像作為樣本,我們使用腐蝕操作。從下面的結果圖我們看到亮區(背景)變細,而黑色區域(字母)則變大了。

    源碼

    下面是本教程的源碼, 你也可以從?here?下載。

    #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include "highgui.h" #include <stdlib.h> #include <stdio.h>using namespace cv;/// 全局變量 Mat src, erosion_dst, dilation_dst;int erosion_elem = 0; int erosion_size = 0; int dilation_elem = 0; int dilation_size = 0; int const max_elem = 2; int const max_kernel_size = 21;/** Function Headers */ void Erosion( int, void* ); void Dilation( int, void* );/** @function main */ int main( int argc, char** argv ) {/// Load 圖像src = imread( argv[1] );if( !src.data ){ return -1; }/// 創建顯示窗口namedWindow( "Erosion Demo", CV_WINDOW_AUTOSIZE );namedWindow( "Dilation Demo", CV_WINDOW_AUTOSIZE );cvMoveWindow( "Dilation Demo", src.cols, 0 );/// 創建腐蝕 TrackbarcreateTrackbar( "Element:\n 0: Rect \n 1: Cross \n 2: Ellipse", "Erosion Demo",&erosion_elem, max_elem,Erosion );createTrackbar( "Kernel size:\n 2n +1", "Erosion Demo",&erosion_size, max_kernel_size,Erosion );/// 創建膨脹 TrackbarcreateTrackbar( "Element:\n 0: Rect \n 1: Cross \n 2: Ellipse", "Dilation Demo",&dilation_elem, max_elem,Dilation );createTrackbar( "Kernel size:\n 2n +1", "Dilation Demo",&dilation_size, max_kernel_size,Dilation );/// Default startErosion( 0, 0 );Dilation( 0, 0 );waitKey(0);return 0; }/** @function Erosion */ void Erosion( int, void* ) {int erosion_type;if( erosion_elem == 0 ){ erosion_type = MORPH_RECT; }else if( erosion_elem == 1 ){ erosion_type = MORPH_CROSS; }else if( erosion_elem == 2) { erosion_type = MORPH_ELLIPSE; }Mat element = getStructuringElement( erosion_type,Size( 2*erosion_size + 1, 2*erosion_size+1 ),Point( erosion_size, erosion_size ) );/// 腐蝕操作erode( src, erosion_dst, element );imshow( "Erosion Demo", erosion_dst ); }/** @function Dilation */ void Dilation( int, void* ) {int dilation_type;if( dilation_elem == 0 ){ dilation_type = MORPH_RECT; }else if( dilation_elem == 1 ){ dilation_type = MORPH_CROSS; }else if( dilation_elem == 2) { dilation_type = MORPH_ELLIPSE; }Mat element = getStructuringElement( dilation_type,Size( 2*dilation_size + 1, 2*dilation_size+1 ),Point( dilation_size, dilation_size ) );///膨脹操作dilate( src, dilation_dst, element );imshow( "Dilation Demo", dilation_dst ); }

    解釋

  • 大部分代碼應該不需要解釋了 (如果有任何疑問,請回頭參考前面的教程)。 讓我們來回顧一下本程序的總體流程:

    • 裝載圖像 (可以是 RGB圖像或者灰度圖 )
    • 創建兩個顯示窗口 (一個用于膨脹輸出,一個用于腐蝕輸出)
    • 為每個操作創建兩個 Trackbars:
      • 第一個 trackbar “Element” 返回?erosion_elem?或者?dilation_elem
      • 第二個 trackbar “Kernel size” 返回?erosion_size?或者?dilation_size?。
    • 每次移動標尺, 用戶函數?Erosion?或者?Dilation?就會被調用,函數將根據當前的trackbar位置更新輸出圖像。

    讓我們分析一下這兩個函數:

  • Erosion:

    /** @function Erosion */ void Erosion( int, void* ) {int erosion_type;if( erosion_elem == 0 ){ erosion_type = MORPH_RECT; }else if( erosion_elem == 1 ){ erosion_type = MORPH_CROSS; }else if( erosion_elem == 2) { erosion_type = MORPH_ELLIPSE; }Mat element = getStructuringElement( erosion_type,Size( 2*erosion_size + 1, 2*erosion_size+1 ),Point( erosion_size, erosion_size ) );/// 腐蝕操作erode( src, erosion_dst, element );imshow( "Erosion Demo", erosion_dst ); }
    • 進行?腐蝕?操作的函數是?erode?。 它接受了三個參數:

      • src: 原圖像

      • erosion_dst: 輸出圖像

      • element: 腐蝕操作的內核。 如果不指定,默認為一個簡單的??矩陣。否則,我們就要明確指定它的形狀,可以使用函數?getStructuringElement:

        Mat element = getStructuringElement( erosion_type,Size( 2*erosion_size + 1, 2*erosion_size+1 ),Point( erosion_size, erosion_size ) );

      我們可以為我們的內核選擇三種形狀之一:

      • 矩形: MORPH_RECT
      • 交叉形: MORPH_CROSS
      • 橢圓形: MORPH_ELLIPSE

      然后,我們還需要指定內核大小,以及?錨點?位置。不指定錨點位置,則默認錨點在內核中心位置。

    • 就這些了,我們現在可以對圖像進行腐蝕操作了。

    Note

    ?

    OpenCV的?erode?函數還有另外的參數,其中一個參數允許你一下對圖像進行多次腐蝕操作。在這個簡單的文檔中沒有用到它,但是你可以參考OpenCV的使用手冊。

  • Dilation:

  • 下面是膨脹的代碼,你可以看到,它和?Erosion?函數是多么相似。 這里我們同樣可以指定內核的形狀,錨點和大小。

    /** @function Dilation */ void Dilation( int, void* ) {int dilation_type;if( dilation_elem == 0 ){ dilation_type = MORPH_RECT; }else if( dilation_elem == 1 ){ dilation_type = MORPH_CROSS; }else if( dilation_elem == 2) { dilation_type = MORPH_ELLIPSE; }Mat element = getStructuringElement( dilation_type,Size( 2*dilation_size + 1, 2*dilation_size+1 ),Point( dilation_size, dilation_size ) );/// 膨脹操作dilate( src, dilation_dst, element );imshow( "Dilation Demo", dilation_dst ); }

    結果

    • 編譯并使用圖像路徑作為參數運行程序,比如我們使用以下圖像:

      下面是操作的結果。 更改Trackbars的位置就會產生不一樣的輸出圖像,自己試試吧。 最后,你還可以通過增加第三個Trackbar來控制膨脹或腐蝕的次數。








    更多形態學變換

    目標

    本文檔嘗試解答如下問題:

    • 如何使用OpenCV函數?morphologyEx?進行形態學操作:
      • 開運算 (Opening)
      • 閉運算 (Closing)
      • 形態梯度 (Morphological Gradient)
      • 頂帽 (Top Hat)
      • 黑帽(Black Hat)

    原理

    Note

    ?

    以下內容來自于Bradski和Kaehler的大作?Learning OpenCV?。

    前一節我們討論了兩種最基本的形態學操作:

    • 腐蝕 (Erosion)
    • 膨脹 (Dilation)

    運用這兩個基本操作,我們可以實現更高級的形態學變換。這篇文檔將會簡要介紹OpenCV提供的5種高級形態學操作:

    開運算 (Opening)

    • 開運算是通過先對圖像腐蝕再膨脹實現的。

    • 能夠排除小團塊物體(假設物體較背景明亮)

    • 請看下面,左圖是原圖像,右圖是采用開運算轉換之后的結果圖。 觀察發現字母拐彎處的白色空間消失。

    閉運算(Closing)

    • 閉運算是通過先對圖像膨脹再腐蝕實現的。

    • 能夠排除小型黑洞(黑色區域)。

    形態梯度(Morphological Gradient)

    • 膨脹圖與腐蝕圖之差

    • 能夠保留物體的邊緣輪廓,如下所示:

    頂帽(Top Hat)

    • 原圖像與開運算結果圖之差

    黑帽(Black Hat)

    • 閉運算結果圖與原圖像之差

    源碼

    下面是本教程的源碼, 你也可以從?這里?下載。

    #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include <stdlib.h> #include <stdio.h>using namespace cv;/// 全局變量 Mat src, dst;int morph_elem = 0; int morph_size = 0; int morph_operator = 0; int const max_operator = 4; int const max_elem = 2; int const max_kernel_size = 21;char* window_name = "Morphology Transformations Demo";/** 回調函數申明 */ void Morphology_Operations( int, void* );/** @函數 main */ int main( int argc, char** argv ) {/// 裝載圖像src = imread( argv[1] );if( !src.data ){ return -1; }/// 創建顯示窗口namedWindow( window_name, CV_WINDOW_AUTOSIZE );/// 創建選擇具體操作的 trackbarcreateTrackbar("Operator:\n 0: Opening - 1: Closing \n 2: Gradient - 3: Top Hat \n 4: Black Hat", window_name, &morph_operator, max_operator, Morphology_Operations );/// 創建選擇內核形狀的 trackbarcreateTrackbar( "Element:\n 0: Rect - 1: Cross - 2: Ellipse", window_name,&morph_elem, max_elem,Morphology_Operations );/// 創建選擇內核大小的 trackbarcreateTrackbar( "Kernel size:\n 2n +1", window_name,&morph_size, max_kernel_size,Morphology_Operations );/// 啟動使用默認值Morphology_Operations( 0, 0 );waitKey(0);return 0;}/** * @函數 Morphology_Operations */ void Morphology_Operations( int, void* ) {// 由于 MORPH_X的取值范圍是: 2,3,4,5 和 6int operation = morph_operator + 2;Mat element = getStructuringElement( morph_elem, Size( 2*morph_size + 1, 2*morph_size+1 ), Point( morph_size, morph_size ) );/// 運行指定形態學操作morphologyEx( src, dst, operation, element );imshow( window_name, dst );}

    解釋

  • 看一下程序的總體流程:

    • 裝載圖像

    • 創建顯示形態學操作的窗口

    • 創建3個trackbar獲取用戶參數:

      • 第一個trackbar?“Operator”?返回用戶選擇的形態學操作類型 (morph_operator).

        createTrackbar("Operator:\n 0: Opening - 1: Closing \n 2: Gradient - 3: Top Hat \n 4: Black Hat",window_name, &morph_operator, max_operator,Morphology_Operations );
      • 第二個trackbar?“Element”?返回?morph_elem, 指定內核形狀:

        createTrackbar( "Element:\n 0: Rect - 1: Cross - 2: Ellipse", window_name,&morph_elem, max_elem,Morphology_Operations );
      • 第三個trackbar?“Kernel Size”?返回內核大小(morph_size)

        createTrackbar( "Kernel size:\n 2n +1", window_name,&morph_size, max_kernel_size,Morphology_Operations );
    • 每當任一標尺被移動, 用戶函數?Morphology_Operations?就會被調用,該函數獲取trackbar的當前值運行指定操作并更新顯示結果圖像。

      /** * @函數 Morphology_Operations */ void Morphology_Operations( int, void* ) {// 由于 MORPH_X的取值范圍是: 2,3,4,5 和 6int operation = morph_operator + 2;Mat element = getStructuringElement( morph_elem, Size( 2*morph_size + 1, 2*morph_size+1 ), Point( morph_size, morph_size ) );/// 運行指定形態學操作morphologyEx( src, dst, operation, element );imshow( window_name, dst );}

      運行形態學操作的核心函數是?morphologyEx?。在本例中,我們使用了4個參數(其余使用默認值):

      • src?: 原 (輸入) 圖像
      • dst: 輸出圖像
      • operation: 需要運行的形態學操作。 我們有5個選項:
        • Opening: MORPH_OPEN : 2
        • Closing: MORPH_CLOSE: 3
        • Gradient: MORPH_GRADIENT: 4
        • Top Hat: MORPH_TOPHAT: 5
        • Black Hat: MORPH_BLACKHAT: 6

      你可以看到, 它們的取值范圍是 <2-6>, 因此我們要將從tracker獲取的值增加(+2):

      int operation = morph_operator + 2;
      • element: 內核,可以使用函數:get_structuring_element:getStructuringElement <>?自定義。
  • 結果

    • 在編譯上面的代碼之后, 我們可以運行結果,將圖片路徑輸入。這里使用圖像:?baboon.png:

    • 這里是顯示窗口的兩個截圖。第一幅圖顯示了使用交錯內核和?開運算?之后的結果, 第二幅圖顯示了使用橢圓內核和?黑帽?之后的結果。











    圖像金字塔

    目標

    本文檔嘗試解答如下問題:

    • 如何使用OpenCV函數?pyrUp?和?pyrDown?對圖像進行向上和向下采樣。

    原理

    Note

    ?

    以下內容來自于Bradski和Kaehler的大作:?Learning OpenCV?。

    • 當我們需要將圖像轉換到另一個尺寸的時候, 有兩種可能:
    • 放大?圖像 或者
    • 縮小?圖像。
    • 盡管OpenCV?幾何變換?部分提供了一個真正意義上的圖像縮放函數(resize, 在以后的教程中會學到),不過在本篇我們首先學習一下使用?圖像金字塔?來做圖像縮放, 圖像金字塔是視覺運用中廣泛采用的一項技術。

    圖像金字塔

    • 一個圖像金字塔是一系列圖像的集合 - 所有圖像來源于同一張原始圖像 - 通過梯次向下采樣獲得,直到達到某個終止條件才停止采樣。
    • 有兩種類型的圖像金字塔常常出現在文獻和應用中:
      • 高斯金字塔(Gaussian pyramid):?用來向下采樣
      • 拉普拉斯金字塔(Laplacian pyramid):?用來從金字塔低層圖像重建上層未采樣圖像
    • 在這篇文檔中我們將使用?高斯金字塔?。

    高斯金字塔

    • 想想金字塔為一層一層的圖像,層級越高,圖像越小。

    • 每一層都按從下到上的次序編號, 層級??(表示為??尺寸小于層級??())。

    • 為了獲取層級為??的金字塔圖像,我們采用如下方法:

      • 將??與高斯內核卷積:

      • 將所有偶數行和列去除。

    • 顯而易見,結果圖像只有原圖的四分之一。通過對輸入圖像??(原始圖像) 不停迭代以上步驟就會得到整個金字塔。

    • 以上過程描述了對圖像的向下采樣,如果將圖像變大呢?:

      • 首先,將圖像在每個方向擴大為原來的兩倍,新增的行和列以0填充()
      • 使用先前同樣的內核(乘以4)與放大后的圖像卷積,獲得 “新增像素” 的近似值。
    • 這兩個步驟(向下和向上采樣) 分別通過OpenCV函數?pyrUp?和?pyrDown?實現, 我們將會在下面的示例中演示如何使用這兩個函數。

    Note

    ?

    我們向下采樣縮小圖像的時候, 我們實際上?丟失?了一些信息。

    源碼

    本教程的源碼如下,你也可以從?這里?下載

    #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include <math.h> #include <stdlib.h> #include <stdio.h>using namespace cv;/// 全局變量 Mat src, dst, tmp; char* window_name = "Pyramids Demo";/** * @函數 main */ int main( int argc, char** argv ) {/// 指示說明printf( "\n Zoom In-Out demo \n " );printf( "------------------ \n" );printf( " * [u] -> Zoom in \n" );printf( " * [d] -> Zoom out \n" );printf( " * [ESC] -> Close program \n \n" );/// 測試圖像 - 尺寸必須能被 2^{n} 整除src = imread( "../images/chicky_512.jpg" );if( !src.data ){ printf(" No data! -- Exiting the program \n");return -1; }tmp = src;dst = tmp;/// 創建顯示窗口namedWindow( window_name, CV_WINDOW_AUTOSIZE );imshow( window_name, dst );/// 循環while( true ){int c;c = waitKey(10);if( (char)c == 27 ){ break; }if( (char)c == 'u' ){ pyrUp( tmp, dst, Size( tmp.cols*2, tmp.rows*2 ) );printf( "** Zoom In: Image x 2 \n" );}else if( (char)c == 'd' ){ pyrDown( tmp, dst, Size( tmp.cols/2, tmp.rows/2 ) );printf( "** Zoom Out: Image / 2 \n" );}imshow( window_name, dst );tmp = dst;}return 0; }

    解釋

  • 讓我們來回顧一下本程序的總體流程:

    • 裝載圖像(此處路徑由程序設定,用戶無需將圖像路徑當作參數輸入)

      /// 測試圖像 - 尺寸必須能被 2^{n} 整除 src = imread( "../images/chicky_512.jpg" ); if( !src.data ){ printf(" No data! -- Exiting the program \n");return -1; }
    • 創建兩個Mat實例, 一個用來儲存操作結果(dst), 另一個用來存儲零時結果(tmp)。

      Mat src, dst, tmp; /* ... */ tmp = src; dst = tmp;
    • 創建窗口顯示結果

      namedWindow( window_name, CV_WINDOW_AUTOSIZE ); imshow( window_name, dst );
    • 執行無限循環,等待用戶輸入。

      while( true ) {int c;c = waitKey(10);if( (char)c == 27 ){ break; }if( (char)c == 'u' ){ pyrUp( tmp, dst, Size( tmp.cols*2, tmp.rows*2 ) );printf( "** Zoom In: Image x 2 \n" );}else if( (char)c == 'd' ){ pyrDown( tmp, dst, Size( tmp.cols/2, tmp.rows/2 ) );printf( "** Zoom Out: Image / 2 \n" );}imshow( window_name, dst );tmp = dst; }

      如果用戶按?ESC?鍵程序退出。 此外,它還提供兩個選項:

      • 向上采樣 (按 ‘u’)

        pyrUp( tmp, dst, Size( tmp.cols*2, tmp.rows*2 )

        函數?pyrUp?接受了3個參數:

        • tmp: 當前圖像, 初始化為原圖像?src?。
        • dst: 目的圖像( 顯示圖像,為輸入圖像的兩倍)
        • Size( tmp.cols*2, tmp.rows*2 )?: 目的圖像大小, 既然我們是向上采樣,?pyrUp?期待一個兩倍于輸入圖像(?tmp?)的大小。
      • 向下采樣(按 ‘d’)

        pyrDown( tmp, dst, Size( tmp.cols/2, tmp.rows/2 )

        類似于?pyrUp, 函數?pyrDown?也接受了3個參數:

        • tmp: 當前圖像, 初始化為原圖像?src?。
        • dst: 目的圖像( 顯示圖像,為輸入圖像的一半)
        • Size( tmp.cols/2, tmp.rows/2 )?:目的圖像大小, 既然我們是向下采樣,?pyrDown?期待一個一半于輸入圖像(?tmp)的大小。
      • 注意輸入圖像的大小(在兩個方向)必須是2的冥,否則,將會顯示錯誤。

      • 最后,將輸入圖像?tmp?更新為當前顯示圖像, 這樣后續操作將作用于更新后的圖像。

        tmp = dst;
  • 結果

    • 在編譯上面的代碼之后, 我們可以運行結果。 程序調用了圖像?chicky_512.jpg?,你可以在?tutorial_code/image?文件夾找到它。 注意圖像大小是?, 因此向下采樣不會產生錯誤()。 原圖像如下所示:

    • 首先按兩次 ‘d’ 連續兩次向下采樣?pyrDown?,結果如圖:

    • 由于我們縮小了圖像,我們也因此丟失了一些信息。通過連續按兩次 ‘u’ 向上采樣兩次?pyrUp?,很明顯圖像有些失真:








    基本的閾值操作

    目標:

    本節簡介:

    • OpenCV中的閾值(threshold)函數:?threshold?的運用。

    基本理論:

    注意:
    本節的解釋出自Bradski與Kaehler的書籍?Learning OpenCV?。

    什么是閾值?

    • 最簡單的圖像分割的方法。

    • 應用舉例:從一副圖像中利用閾值分割出我們需要的物體部分(當然這里的物體可以是一部分或者整體)。這樣的圖像分割方法是基于圖像中物體與背景之間的灰度差異,而且此分割屬于像素級的分割。

    • 為了從一副圖像中提取出我們需要的部分,應該用圖像中的每一個像素點的灰度值與選取的閾值進行比較,并作出相應的判斷。(注意:閾值的選取依賴于具體的問題。即:物體在不同的圖像中有可能會有不同的灰度值。

    • 一旦找到了需要分割的物體的像素點,我們可以對這些像素點設定一些特定的值來表示。(例如:可以將該物體的像素點的灰度值設定為:‘0’(黑色),其他的像素點的灰度值為:‘255’(白色);當然像素點的灰度值可以任意,但最好設定的兩種顏色對比度較強,方便觀察結果)。

    閾值化的類型:

    • OpenCV中提供了閾值(threshold)函數:?threshold?。

    • 這個函數有5種閾值化類型,在接下來的章節中將會具體介紹。

    • 為了解釋閾值分割的過程,我們來看一個簡單有關像素灰度的圖片,該圖如下。該圖中的藍色水平線代表著具體的一個閾值。

    閾值類型1:二進制閾值化

    • 該閾值化類型如下式所示:

    • 解釋:在運用該閾值類型的時候,先要選定一個特定的閾值量,比如:125,這樣,新的閾值產生規則可以解釋為大于125的像素點的灰度值設定為最大值(如8位灰度值最大為255),灰度值小于125的像素點的灰度值設定為0。

    閾值類型2:反二進制閾值化

    • 該閾值類型如下式所示:

    • 解釋:該閾值化與二進制閾值化相似,先選定一個特定的灰度值作為閾值,不過最后的設定值相反。(在8位灰度圖中,例如大于閾值的設定為0,而小于該閾值的設定為255)。

    閾值類型3:截斷閾值化

    • 該閾值化類型如下式所示:

    • 解釋:同樣首先需要選定一個閾值,圖像中大于該閾值的像素點被設定為該閾值,小于該閾值的保持不變。(例如:閾值選取為125,那小于125的閾值不改變,大于125的灰度值(230)的像素點就設定為該閾值)。

    閾值類型4:閾值化為0

    • 該閾值類型如下式所示:

    • 解釋:先選定一個閾值,然后對圖像做如下處理:1 像素點的灰度值大于該閾值的不進行任何改變;2 像素點的灰度值小于該閾值的,其灰度值全部變為0。

    閾值類型5:反閾值化為0

    • 該閾值類型如下式所示:

    • 解釋:原理類似于0閾值,但是在對圖像做處理的時候相反,即:像素點的灰度值小于該閾值的不進行任何改變,而大于該閾值的部分,其灰度值全部變為0。

    代碼示范:

    簡單的代碼如下。同樣也可以在網站中?下載?以下代碼。

    #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include <stdlib.h> #include <stdio.h>using namespace cv;/// 全局變量定義及賦值int threshold_value = 0; int threshold_type = 3;; int const max_value = 255; int const max_type = 4; int const max_BINARY_value = 255;Mat src, src_gray, dst; char* window_name = "Threshold Demo";char* trackbar_type = "Type: \n 0: Binary \n 1: Binary Inverted \n 2: Truncate \n 3: To Zero \n 4: To Zero Inverted"; char* trackbar_value = "Value";/// 自定義函數聲明 void Threshold_Demo( int, void* );/** * @主函數 */ int main( int argc, char** argv ) {/// 讀取一副圖片,不改變圖片本身的顏色類型(該讀取方式為DOS運行模式)src = imread( argv[1], 1 );/// 將圖片轉換成灰度圖片cvtColor( src, src_gray, CV_RGB2GRAY );/// 創建一個窗口顯示圖片namedWindow( window_name, CV_WINDOW_AUTOSIZE );/// 創建滑動條來控制閾值createTrackbar( trackbar_type,window_name, &threshold_type,max_type, Threshold_Demo );createTrackbar( trackbar_value,window_name, &threshold_value,max_value, Threshold_Demo );/// 初始化自定義的閾值函數Threshold_Demo( 0, 0 );/// 等待用戶按鍵。如果是ESC健則退出等待過程。while(true){int c;c = waitKey( 20 );if( (char)c == 27 ){ break; }}}/** * @自定義的閾值函數 */ void Threshold_Demo( int, void* ) {/* 0: 二進制閾值 1: 反二進制閾值 2: 截斷閾值 3: 0閾值 4: 反0閾值 */threshold( src_gray, dst, threshold_value, max_BINARY_value,threshold_type );imshow( window_name, dst ); }

    解釋:

  • 先看一下整個程序的結構:

    • 先讀取一副圖片,如果是圖片顏色類型是RGB3色類型,則轉換成灰度類型的圖像。轉換顏色類型可以運用OpenCV中的 cvtColor<> 函數。

      src = imread( argv[1], 1 );/// 顏色類型從RGB 轉換成灰度 cvtColor( src, src_gray, CV_RGB2GRAY );
    • 然后創建一個窗口來顯示該圖片可以檢驗轉換結果

      namedWindow( window_name, CV_WINDOW_AUTOSIZE );
    • 接著該程序創建兩個滾動條來等待用戶的輸入:

      • 第一個滾動條作用:選擇閾值類型:二進制,反二進制,截斷,0,反0。
      • 第二個滾動條作用:選擇閾值的大小。
      createTrackbar( trackbar_type,window_name, &threshold_type,max_type, Threshold_Demo );createTrackbar( trackbar_value,window_name, &threshold_value,max_value, Threshold_Demo );
    • 在這里等到用戶拖動滾動條來輸入閾值類型以及閾值的大小,或者是用戶鍵入ESC健退出程序。

    • 無論何時拖動滾動條,用戶自定義的閾值函數都將會被調用。

      /** * @自定義的閾值函數 */ void Threshold_Demo( int, void* ) {/* 0: 二進制閾值 1: 反二進制閾值 2: 截斷閾值 3: 0閾值 4: 反0閾值 */threshold( src_gray, dst, threshold_value, max_BINARY_value,threshold_type );imshow( window_name, dst ); }

      就像你看到的那樣,在這樣的過程中,函數 threshold<> 會接受到5個參數:

      • src_gray: 輸入的灰度圖像的地址。
      • dst: 輸出圖像的地址。
      • threshold_value: 進行閾值操作時閾值的大小。
      • max_BINARY_value: 設定的最大灰度值(該參數運用在二進制與反二進制閾值操作中)。
      • threshold_type: 閾值的類型。從上面提到的5種中選擇出的結果。
  • 結果:

  • 程序編譯過后,從正確的路徑中讀取一張圖片。例如,該輸入圖片如下所示:

  • 首先,閾值類型選擇為反二進制閾值類型。我們希望灰度值大于閾值的變暗,即這一部分像素的灰度值設定為0。從下圖中可以很清楚的看到這樣的變化。(在原圖中,狗的嘴和眼睛部分比圖像中的其他部分要亮,在結果圖中可以看到由于反二進制閾值分割,這兩部分變的比其他圖像的都要暗。原理具體參見本節中反二進制閾值部分解釋)

  • 現在,閾值的類型選擇為0閾值。在這種情況下,我們希望那些在圖像中最黑的像素點徹底的變成黑色,而其他大于閾值的像素保持原來的面貌。其結果如下圖所示:




  • from: http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/table_of_content_imgproc/table_of_content_imgproc.html#table-of-content-imgproc

    總結

    以上是生活随笔為你收集整理的OpenCV之imgproc 模块. 图像处理(1)图像平滑处理 腐蚀与膨胀(Eroding and Dilating) 更多形态学变换 图像金字塔 基本的阈值操作的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    欧美激情第十页 | 射射色 | 中文字幕资源网 国产 | 免费在线播放 | 中文字幕观看视频 | www.色午夜 | 18国产精品白浆在线观看免费 | 日日操日日插 | 人人藻人人澡人人爽 | 国产夫妻性生活自拍 | 2022中文字幕在线观看 | 最近最新中文字幕 | 久久久精品小视频 | 日韩欧美在线观看一区二区 | 日韩久久久久 | 丁香资源影视免费观看 | 日韩黄色免费 | 综合色综合 | 天天夜操 | 精品国产理论 | 久久人人爽人人片 | 欧美电影黄色 | 久久久精品免费观看 | 综合久色 | 亚洲无吗av | 91精品免费在线观看 | 久久黄网站 | 美女免费黄网站 | 九九精品久久 | 手机av电影在线 | 成人a视频 | 69精品视频 | 国产综合精品久久 | 精品久久久久久国产 | 综合精品在线 | www.天天操.com | 五月婷婷视频在线观看 | 成年人免费观看国产 | 日韩免费久久 | 中文字幕超清在线免费 | 天天色天天射天天干 | 成年人免费看片 | 成人福利在线播放 | 亚洲美女在线一区 | 狠狠色狠狠综合久久 | 97在线视| 亚洲精品美女在线观看播放 | 欧美日本不卡视频 | 在线成人高清电影 | 婷婷久久一区二区三区 | 99r国产精品 | 在线成人中文字幕 | 免费观看的黄色片 | av不卡网站 | 奇米四色影狠狠爱7777 | 99免在线观看免费视频高清 | 亚洲综合色视频 | 中文字幕制服丝袜av久久 | 国内精品免费久久影院 | 99日韩精品 | 久草电影在线观看 | 韩国视频一区二区三区 | 99精品在线观看视频 | 久久视频一区 | 免费在线国产 | 99tvdz@gmail.com| 四虎国产| 久久99亚洲精品久久 | 国产精品xxxx18a99 | 亚洲人成人在线 | 91手机在线看片 | 91视频在线免费观看 | 在线看黄色av | 久久久久久视频 | 国产精品久久电影网 | 91成人精品一区在线播放 | 精品久久久久久亚洲综合网站 | av免费在线免费观看 | 久久久午夜精品理论片中文字幕 | 1区2区视频 | 中文字幕视频在线播放 | 精品夜夜嗨av一区二区三区 | 91大神在线观看视频 | 日韩电影一区二区在线 | 天天综合网久久综合网 | 亚洲视频在线观看网站 | 亚洲一级黄色 | 欧美一级欧美一级 | 五月婷婷婷婷婷 | 久久婷婷开心 | 日韩网站一区二区 | 香蕉色综合 | 91av中文 | 伊人久久电影网 | 国产欧美久久久精品影院 | 精品少妇一区二区三区在线 | 久久精品老司机 | 天天摸天天舔 | 精品国产人成亚洲区 | 日韩高清一| 日本久久片| 亚洲视频电影在线 | 在线视频国产区 | 久久黄色影视 | 精品欧美一区二区在线观看 | 人人插人人射 | 色国产精品一区在线观看 | 亚洲欧美婷婷六月色综合 | 福利二区视频 | 成人欧美一区二区三区黑人麻豆 | 亚洲精品网址在线观看 | 国产一级免费在线观看 | 亚洲免费视频在线观看 | 婷婷丁香六月天 | 91久久国产自产拍夜夜嗨 | 国产精品一区二区在线免费观看 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 99re热精品视频 | 天天干人人干 | 久久久久综合精品福利啪啪 | 日韩中文字幕免费看 | 激情视频免费在线观看 | 中文字幕av最新更新 | 超碰九九 | 人交video另类hd | 丝袜制服天堂 | 人人dvd| 国产大片免费久久 | 色综合中文综合网 | 狠狠色噜噜狠狠 | 中文在线8资源库 | 看毛片网站 | 国产色综合 | 人人爽人人爽人人片 | 国产精品一区二区62 | 日韩av一区在线观看 | 六月丁香婷婷久久 | 欧美国产精品一区二区 | 国产亚洲成人精品 | 天天操天天艹 | 久草久草久草久草 | 韩国精品福利一区二区三区 | 丁香婷婷网 | 日韩免费av网址 | 十八岁以下禁止观看的1000个网站 | 色噜噜狠狠狠狠色综合久不 | 国产玖玖视频 | 超碰免费久久 | 人人爱人人做人人爽 | 欧美在线视频一区二区三区 | 久久综合激情 | 伊人热| 97电影在线看视频 | 日操操| 97色资源 | 91丨精品丨蝌蚪丨白丝jk | 亚洲一区精品人人爽人人躁 | 毛片a级片 | 国产精品成人久久久久 | 国产视频欧美视频 | 又爽又黄又刺激的视频 | 色综合天天天天做夜夜夜夜做 | 伊人va| 国产精品h在线观看 | 日韩视频在线播放 | 日韩激情中文字幕 | 美女久久久久久久久久 | 在线视频 你懂得 | 九九在线国产视频 | 日韩黄色av网站 | 日韩欧美高清视频在线观看 | 人人玩人人添人人澡97 | 黄色三级久久 | 国产视频999 | 99精品久久久久 | 精品高清美女精品国产区 | 精品久久免费看 | 免费成人在线观看 | 黄色在线免费观看网站 | 日韩高清免费无专码区 | 国产手机在线观看 | 国产一级片播放 | 国产精品网红直播 | 欧美日韩国产精品久久 | 又黄又色又爽 | 国产精品久久久久久高潮 | 91黄站| 能在线看的av | 91精品久久久久 | 人人添人人澡 | 国产中文字幕在线观看 | bayu135国产精品视频 | 亚洲国产高清在线观看视频 | 超级碰99 | 婷婷六月丁香激情 | 插插插色综合 | 在线精品在线 | 97超碰网| 国产无区一区二区三麻豆 | 国产成人在线一区 | 亚洲美女免费视频 | www.久久精品视频 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 久久免费成人精品视频 | 亚洲精品456在线播放第一页 | 国产伦理久久精品久久久久_ | 91精品视频观看 | 成人啪啪18免费游戏链接 | 在线观看中文字幕2021 | 精品久久久久久久久久久久久久久久 | 亚洲精品88欧美一区二区 | 国产精品一区二区在线免费观看 | 午夜精品一区二区三区视频免费看 | 久久精品一区二区三区国产主播 | 欧美福利片在线观看 | 69国产盗摄一区二区三区五区 | 亚洲综合色激情五月 | 国产精品 中文字幕 亚洲 欧美 | 欧美精品亚州精品 | 美女黄频网站 | 六月丁香在线观看 | 91原创在线观看 | 国产传媒一区在线 | 国产一区在线不卡 | 婷婷色中文 | 视频一区在线播放 | 在线观看黄色小视频 | 日本高清中文字幕有码在线 | 中文国产成人精品久久一 | av在线在线| 草久在线| 91精品久久久久久综合五月天 | 亚洲国产精品va在线 | 午夜av电影院 | 亚洲最大的av网站 | www黄| 黄色毛片大全 | 91桃花视频 | 91福利视频免费 | 91精品在线免费 | 香蕉91视频 | 国产精品一区二区免费在线观看 | 久久精品老司机 | 伊甸园永久入口www 99热 精品在线 | 国产福利在线不卡 | 亚洲一区二区视频 | 911精品视频| 免费在线观看污网站 | 久久新| 免费看污网站 | 午夜精品视频免费在线观看 | 精品伦理一区二区三区 | 亚洲不卡在线 | 日韩伦理片一区二区三区 | 国产91成人 | 国产一级91| 久草在线视频在线观看 | 国产粉嫩在线 | 久久久久久中文字幕 | 国产69精品久久99的直播节目 | 欧美在线观看小视频 | 久艹视频免费观看 | 在线观看亚洲精品视频 | 国产91全国探花系列在线播放 | 久久黄色美女 | 日日夜夜噜 | 国产不卡高清 | av不卡在线看 | 日韩在线观看第一页 | 日本黄色大片免费看 | 久一在线| 日韩美女免费线视频 | 中文字幕在线观看不卡 | 精品在线视频一区二区三区 | 91天堂素人约啪 | 天天操天天干天天爱 | 成人av资源网 | av资源在线看 | 97精品国产97久久久久久粉红 | 久久在线视频精品 | 人人添人人澡人人澡人人人爽 | 成年人免费看的视频 | 在线免费观看黄色av | 在线观看av中文字幕 | 国产午夜三级一区二区三 | 天堂视频一区 | a级片韩国 | 国产精品久久久久久久久久久久午 | 国产无区一区二区三麻豆 | 五月婷婷久久综合 | 美腿丝袜一区二区三区 | 日韩毛片在线播放 | 国产91精品一区二区麻豆网站 | 国产午夜精品在线 | 成人国产网址 | 狠狠狠狠狠狠狠狠 | 欧美性极品xxxx做受 | 日日干av| 久久久久五月 | 亚洲精品视频在线免费 | 黄视频网站大全 | 国产精品久久久电影 | 欧美一级片免费在线观看 | 一区二区视频在线观看免费 | www.夜夜骑.com | 日韩av在线小说 | 欧美一区二区三区在线视频观看 | 欧美日本啪啪无遮挡网站 | 五月综合激情婷婷 | 久久另类小说 | 亚欧日韩av | av+在线播放在线播放 | 国产成人一区二区三区久久精品 | 国产 欧美 日产久久 | 日韩大片在线免费观看 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 96久久 | 久久国产精品色av免费看 | 在线一二区 | 国内久久精品视频 | 久久久免费观看视频 | 中文字幕 国产 一区 | 91中文字幕在线视频 | 波多野结衣在线播放一区 | 国产日韩欧美视频在线观看 | 国产色小视频 | 91中文字幕一区 | 99精品视频精品精品视频 | 亚洲精品玖玖玖av在线看 | 国产精品一区二区久久 | av福利免费| 91精品爽啪蜜夜国产在线播放 | 日韩成人免费在线 | 亚洲精品免费在线观看视频 | 国产精品片 | 一级黄色a视频 | 国产精品美 | 国产在线色站 | 日日夜夜操av | 操操操日日日 | 色视频在线免费观看 | 日韩精品免费在线观看 | 亚洲日本激情 | 成人全视频免费观看在线看 | 最新精品视频在线 | 4438全国亚洲精品在线观看视频 | 狠狠色丁香久久综合网 | 激情www| 天天爱天天射 | 国产日韩精品一区二区在线观看播放 | 99精品免费在线观看 | 免费在线播放黄色 | 国产视频资源 | 超碰在线天天 | 激情av五月婷婷 | 久久综合网色—综合色88 | 毛片视频网址 | 福利一区二区在线 | 超碰在线最新网址 | 婷婷在线五月 | 欧美性色综合 | 色婷婷综合激情 | 国产精品久久久久一区二区三区共 | 日韩免费高清在线观看 | 久久69av| 久久午夜精品视频 | 成人h视频在线播放 | 在线观看自拍 | 日韩高清一二三区 | 日韩在线观看视频一区二区三区 | 17婷婷久久www| 午夜av免费| 国产午夜视频在线观看 | 欧美最猛性xxx| 欧美精品一区二区在线播放 | 国产精品手机在线播放 | 黄色www在线观看 | 中文av在线免费观看 | 欧美精品久久天天躁 | 超碰在线国产 | 欧洲色综合| 久久精品中文字幕一区二区三区 | 亚洲 在线 | 日韩大片在线 | 午夜精品视频在线 | 91福利视频网站 | 亚洲激情婷婷 | 激情狠狠干 | 黄污网| 久久99国产精品 | 久草视频手机在线 | 久久第四色 | 亚洲国产激情 | 精品视频在线免费观看 | 国产精品日韩欧美一区二区 | 精品在线视频观看 | 国产中文字幕大全 | 综合视频在线 | 亚州精品国产 | 九九亚洲视频 | 97人人模人人爽人人少妇 | 国产精品第二页 | 91在线国产观看 | 五月天综合在线 | 五月婷婷综合久久 | 日韩免费电影在线观看 | www.99久久.com | 久久电影日韩 | 中文字幕精品一区二区精品 | 国产成人久久精品 | 国产97视频 | 日韩在线免费小视频 | 男女啪啪视屏 | 在线之家官网 | 国产精品午夜免费福利视频 | 国产在线精品福利 | 黄色一级大片在线观看 | 高清av在线| 日日夜夜天天综合 | 中文字幕精品三级久久久 | 欧美肥妇free | 久久黄色小说视频 | 国产在线不卡精品 | 国产一区二区三区免费观看视频 | 在线国产福利 | 国产乱老熟视频网88av | 欧美日韩在线视频免费 | 久久久久久久久久久网 | 久久精品国产成人 | 激情五月播播久久久精品 | 在线天堂日本 | 国产一区二三区好的 | 亚洲在线黄色 | 国产在线观看91 | 亚洲人人射 | 国产在线一区观看 | 久久久久久久久久久福利 | av爱干 | 国产亚洲视频在线 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 中文字幕美女免费在线 | 狠狠狠色狠狠色综合 | 91在线中文字幕 | www.黄色片.com| 91九色在线 | 色狠狠狠| 一区二区三区视频在线 | 国产精品理论片在线观看 | 精品一区二区综合 | 亚洲精品九九 | 亚洲狠狠干 | 日韩精品免费一区二区在线观看 | av黄网站 | 综合精品久久久 | 五月综合激情 | 在线91视频 | 天天综合视频在线观看 | 国产成人av一区二区三区在线观看 | 国产日韩欧美在线播放 | 97超碰免费 | 在线欧美日韩 | 国产成人精品一区二区在线 | 二区三区在线视频 | 久草精品资源 | 国产成人亚洲在线观看 | 久久精品国亚洲 | 免费观看一级 | av短片在线| 国产精品视频免费观看 | 亚洲国产精品激情在线观看 | 在线亚洲人成电影网站色www | 天天爽人人爽夜夜爽 | 国产九九九视频 | 在线视频日韩一区 | 婷婷婷国产在线视频 | 在线99热 | 青青河边草免费视频 | 国产亚洲精品久久久久久电影 | 婷婷丁香七月 | 精品在线观看视频 | 青春草免费在线视频 | 久久国产女人 | 久久在线免费观看 | 国产日韩欧美网站 | 美女在线免费观看视频 | 日韩av在线高清 | 欧美精品久久久久久久久久丰满 | 最近日韩免费视频 | 久草视频手机在线 | 久久久国产一区二区 | 亚洲精品一区二区精华 | 欧美a在线免费观看 | 久久永久免费 | 久久成 | 天天干视频在线 | 色综合色综合久久综合频道88 | 国产在线国产 | 国产精品女同一区二区三区久久夜 | 一区二区 不卡 | 操操操日日 | 91视频成人免费 | 天天摸天天操天天爽 | 在线看成人 | 成人免费共享视频 | 亚洲一区动漫 | 91污视频在线 | 亚洲91视频| 免费国产在线视频 | 亚洲免费一级 | 婷婷电影在线观看 | 国产成人av免费在线观看 | 亚洲蜜桃av| 欧美资源 | 久久综合久久综合这里只有精品 | 波多野结衣一区二区三区中文字幕 | 色婷婷亚洲综合 | 精品一二三四视频 | 久久黄色影视 | 最近中文字幕mv免费高清在线 | 黄色的网站免费看 | 日韩电影在线一区 | 人人爽久久涩噜噜噜网站 | 成人免费观看完整版电影 | 97色婷婷人人爽人人 | 黄色tv视频 | 国产 欧美 日本 | 激情伊人五月天 | 色九色| 国产视频精品在线 | 色欲综合视频天天天 | 超碰在线公开 | 久久精品亚洲一区二区三区观看模式 | 国产精品久久久久久久久久久久冷 | 成人毛片在线视频 | 伊人成人激情 | 99久久久久久久 | 久草线 | 国产一区二区不卡视频 | 日韩毛片在线播放 | 日日夜夜精品免费视频 | 日本精品一区二区三区在线观看 | 66av99精品福利视频在线 | 成人a在线| 国色综合 | 中文字幕一区二 | 一区二区 不卡 | 午夜成人免费影院 | 黄色av一区二区 | 激情五月在线观看 | 九九热有精品 | 亚洲国产综合在线 | 成人在线你懂得 | 色婷婷成人 | 国产97色在线 | 激情综合网五月婷婷 | 久久伊人免费视频 | 午夜狠狠干 | 黄色av电影网 | 在线观看日韩av | 日韩亚洲精品电影 | 国产麻豆精品一区二区 | 国产69精品久久99不卡的观看体验 | 亚洲乱码国产乱码精品天美传媒 | 字幕网av | 视频在线观看一区 | 中文字幕在线观看的网站 | av福利在线播放 | 亚洲国内精品 | 在线a亚洲视频播放在线观看 | 精品成人网 | 久久久免费毛片 | 婷婷日日 | 欧洲av不卡 | 激情开心| 亚洲精品在线国产 | 成年人免费在线观看网站 | 成人一区影院 | 国产精品久久二区 | 日韩av偷拍 | 93久久精品日日躁夜夜躁欧美 | av在线免费网 | 欧美做受高潮 | 九九有精品| 在线视频观看你懂的 | 亚洲 欧美 综合 在线 精品 | 黄色免费观看网址 | 国产人成一区二区三区影院 | 欧美日韩视频在线观看免费 | av官网在线 | 国产xxxxx在线观看 | 青草视频网 | 亚洲高清视频在线 | 999成人 | 九九热.com| 天天干一干 | 狠狠色丁香婷婷综合橹88 | 丁香在线 | av在线超碰| 精品九九九九 | 国产精品va最新国产精品视频 | 国产精品女同一区二区三区久久夜 | 经典三级一区 | 91精品成人| 国产一级一级国产 | 免费久久精品视频 | 一级淫片a| av高清在线观看 | 国产黄色网 | 国产免费三级在线观看 | 中日韩欧美精彩视频 | 青青河边草手机免费 | av一级免费| 免费成人在线视频网站 | 婷婷狠狠操 | 黄色大片日本免费大片 | 国产一区二区三区高清播放 | 国产欧美日韩精品一区二区免费 | 91免费在线看片 | 国产精品第2页 | 狠狠亚洲 | 国产日产欧美在线观看 | 特级西西444www大精品视频免费看 | 日韩区欠美精品av视频 | 欧美性爽爽| 久久久久久久久免费 | 欧美永久视频 | 精品国产乱码久久久久久浪潮 | 最近最新最好看中文视频 | 亚洲欧美综合精品久久成人 | 欧美色综合天天久久综合精品 | 亚洲欧美日韩精品久久奇米一区 | 天天干夜夜爽 | 亚洲人精品午夜 | 日韩中文在线电影 | 一级黄色片在线免费看 | 日韩欧美精品一区二区三区经典 | 毛片一区二区 | 欧美亚洲专区 | 欧美夫妻生活视频 | 欧美动漫一区二区三区 | av片在线看 | 午夜精品区 | 成年人在线观看网站 | 国产精品刺激对白麻豆99 | 中文字幕在线观看日本 | 这里只有精品视频在线观看 | 国产中文字幕第一页 | 色av婷婷 | 免费看91的网站 | 国产成人精品亚洲a | 69av在线视频 | 久久人人添人人爽添人人88v | wwxxxx日本| 国产一区二区三区高清播放 | 丁香九月激情综合 | 久久久国产一区二区 | 韩国av免费在线观看 | 狠狠干干| 免费91在线 | 亚洲电影av在线 | 成人网在线免费视频 | 狠狠干免费 | 在线观看国产日韩 | 在线精品观看国产 | 91av电影在线 | 成人影片在线免费观看 | 日韩xxxx视频 | 中文字幕日韩一区二区三区不卡 | 色综合久久中文字幕综合网 | 在线观看网站黄 | 成人免费观看视频网站 | 久草久视频 | 日本中文字幕在线观看 | 日韩欧美在线视频一区二区 | 五月花丁香婷婷 | 永久免费毛片在线观看 | 国产系列 在线观看 | 米奇四色影视 | 婷婷亚洲综合五月天小说 | 天天色图 | 日韩黄色一级电影 | 久久人人爽人人爽人人片av免费 | 久久国产经典 | 久草在线视频资源 | 久草久草在线 | 在线有码中文 | 国内丰满少妇猛烈精品播 | 91精品国自产在线偷拍蜜桃 | 午夜精品三区 | 亚洲免费在线视频 | 成人a在线观看高清电影 | 99精品在线免费视频 | 日韩三级久久 | 国产精品久久久久久久久久三级 | 欧美韩国日本在线 | 国产色一区 | 狠狠干中文字幕 | 粉嫩av一区二区三区免费 | 91tv国产成人福利 | 69视频网站 | 国产日韩欧美中文 | 欧美亚洲一级片 | 国产一级久久久 | 欧美三级高清 | 国产二区视频在线 | 亚洲精品久久久久中文字幕二区 | 久久婷婷精品视频 | 黄色av电影网 | 色偷偷88欧美精品久久久 | 激情动态| 欧美激情操 | 欧美日韩性视频在线 | 一区二区三区久久 | 精品国产美女在线 | 亚洲三级影院 | 超碰在线观看av.com | 欧美人人 | 高清不卡毛片 | 中文字幕在线专区 | 欧美精品一区二区免费 | 青青久草在线 | 91在线91| 亚洲精选视频免费看 | 日韩免费电影 | 国产成人精品午夜在线播放 | 精品99在线视频 | 99 精品 在线| 香蕉视频在线看 | 国产成年人av | 免费精品在线观看 | 亚洲三级在线 | 亚洲人人射 | 国内精品久久久久影院优 | 在线观看免费观看在线91 | 久久国产精彩视频 | www.五月天激情 | 久久久久综合视频 | 国产精品99久久久精品免费观看 | 丁香久久综合 | 国产五月婷 | 国产一区免费观看 | 免费观看www小视频的软件 | 欧美男女爱爱视频 | 欧美国产日韩在线观看 | 国产精品18久久久久久首页狼 | 国产精品男女视频 | 99精品久久久久久久久久综合 | 成人免费视频免费观看 | 91久久一区二区 | 国产美女黄网站免费 | 免费日韩视频 | 日日草夜夜操 | 精品在线一区二区三区 | 美女很黄免费网站 | 国产亚洲视频中文字幕视频 | 免费看污的网站 | 激情网站五月天 | 亚洲最大免费成人网 | 在线成人短视频 | 久久99深爱久久99精品 | 伊人精品在线 | 一区 在线 影院 | 在线欧美日韩 | 亚洲国产欧美一区二区三区丁香婷 | 欧美一级大片在线观看 | 欧美a视频在线观看 | 国产一区在线观看免费 | 日韩爱爱网站 | 一区二区三区中文字幕在线 | 97超碰资源站 | 精品日韩中文字幕 | 色射爱| 天堂在线成人 | 精品色综合| 欧洲性视频 | 超碰在线网 | 亚洲精品国产精品国自产观看 | 中文字幕在线观 | 亚洲午夜精品电影 | 国产精品九色 | 亚洲午夜精品在线观看 | 色狠狠操| 天堂在线一区二区三区 | 中文字幕久久精品一区 | 99热在线观看 | 日本午夜免费福利视频 | 九九九九九精品 | 免费三级网 | 国产高清一级 | 欧美日韩性视频 | 国产91精品一区二区麻豆网站 | 欧美激情视频三区 | 少妇做爰k8经典 | 久久国产片 | 亚洲人成在线观看 | 中文字幕在线视频网站 | 国产99久久久久久免费看 | 免费中午字幕无吗 | 在线观看日韩av | 久草视频免费看 | 婷婷社区五月天 | 久久久久久久久久久网 | 五月激情五月激情 | 18岁免费看片 | 国产理论片在线观看 | 国产精品第 | 国产在线精品区 | 天天操夜夜操夜夜操 | 麻豆视频免费版 | 欧美日韩亚洲在线观看 | 国内精品国产三级国产aⅴ久 | 亚洲免费av在线播放 | 成人动态视频 | 天天色天天艹 | 婷婷视频在线 | 在线日韩三级 | 麻豆成人在线观看 | 日韩在线理论 | 成年人黄色av | 丁香六月婷婷激情 | 操操操日日 | 青春草视频在线播放 | 日韩视频免费观看高清完整版在线 | 最新日韩精品 | 天天干天天操天天入 | 视频成人永久免费视频 | 国产一区二区三区高清播放 | 日韩欧美精品在线观看 | 在线观看中文字幕一区 | 一区二区三区四区不卡 | 很污的网站 | 天天插天天干天天操 | 久久蜜臀av | 国产高清日韩 | 国产专区一| 亚洲精品高清在线 | www.夜夜草| 国产精品精品国产 | 91成版人在线观看入口 | 亚洲综合色视频在线观看 | www.干| 日韩3区| 国产亚洲精品美女久久 | 在线播放视频一区 | 国内精品视频一区二区三区八戒 | www麻豆视频 | 九色视频网 | 久久久久高清毛片一级 | 国产精品久久久久久久久久直播 | 国产午夜亚洲精品 | 日韩av电影国产 | 日韩精品一区二区三区视频播放 | 99精品久久久久久久久久综合 | 最近免费中文字幕mv在线视频3 | 精品伦理一区二区三区 | 免费看国产视频 | 日韩精品一区二区三区在线视频 | 很污的网站 | 国色天香在线 | 欧美日韩精品在线 | 久久久久免费 | 在线中文字幕电影 | 日韩欧美在线高清 | 欧美日韩一区二区在线 | 在线一二区 | 97av免费视频| 国产精品久久久久影视 | 久久线视频 | 91色网址| 欧洲精品久久久久毛片完整版 | 9在线观看免费 | 日韩av网页 | 国产精品久久久久久久久久妇女 | 日本三级不卡视频 | 日韩精品在线观看视频 | 国产成人一二片 | 久久久精品国产免费观看同学 | 国产99在线免费 | www.色婷婷| 国产在线国偷精品产拍免费yy | 天天做夜夜做 | 久久久久视 | 久久久人 | 天天插天天狠天天透 | 亚洲视频电影在线 | 99久久综合精品五月天 | 久久国产精品免费看 | 亚洲另类在线视频 | 久热免费在线观看 | 99在线视频观看 | 精品一区二区在线播放 | 一级成人免费 | 久久噜噜少妇网站 | 久久人人爽人人爽人人片av软件 | 国产在线播放一区二区三区 | 亚洲午夜精品久久久 | 免费在线观看的av网站 | 国产在线视频一区二区三区 | 午夜久久影视 | 亚洲成人精品 | 在线免费观看羞羞视频 | 久久免费激情视频 | 首页国产精品 | 日本亚洲国产 | 国产视频二区三区 | 99久久精品视频免费 | 免费国产在线视频 | 特黄特色特刺激视频免费播放 | 激情婷婷综合 | 久久亚洲国产精品 | 亚州日韩中文字幕 | 国产又粗又猛又色 | 91视频免费| 欧美最猛性xxx | 高清一区二区三区 | 福利视频第一页 | 久久99精品热在线观看 | 特级大胆西西4444www | 激情五月婷婷激情 | 国产成人在线精品 | av在线播放国产 | 欧美国产日韩在线视频 | 亚洲免费资源 | 免费网站黄 | 在线中文字幕观看 | 午夜精品剧场 | 天天爽人人爽 | 一区二区中文字幕在线播放 | 最近在线中文字幕 | 欧美a视频在线观看 | 奇米影视8888在线观看大全免费 | 99精品一区二区三区 | 国产视频中文字幕 | 97电影在线| 在线观看午夜 | 深爱婷婷激情 | 亚洲欧美va | 久久电影日韩 | 激情综合网色播五月 | 久久99热精品 | 日韩欧美中文 | 免费黄色激情视频 | 欧美性生活小视频 | 成 人 黄 色视频免费播放 | 日韩欧美在线观看 | 少妇18xxxx性xxxx片 | 久久er99热精品一区二区三区 | 看黄色91 | 久久久一本精品99久久精品 | 成人免费中文字幕 | 久草视频在线免费看 | 国产精品一区二 | a色视频| 九九视频免费观看视频精品 | 国产又粗又猛又黄 | 丝袜美腿亚洲 | 国产精品黄色 | 免费黄色在线 | 91完整版 | 国产成人福利在线 | 久操操 | av在线a| 五月香婷| 久久国产精品区 | 亚洲综合少妇 | 国产破处在线视频 | 婷婷激情五月综合 | 午夜精品一二区 | 特级黄色片免费看 | 婷婷激情久久 | 国产无遮挡又黄又爽在线观看 | av在线等 | 国产免费叼嘿网站免费 | 国产a级精品 | 久久综合九色综合97婷婷女人 | 日韩精品在线视频免费观看 | 二区三区毛片 | 国产1区2区3区精品美女 | 国产传媒一区在线 | 亚洲美女在线一区 | 97视频免费| 久久久久久久久久久国产精品 | 四虎天堂| 91亚洲精品久久久中文字幕 | 久久久五月婷婷 | 一区二区三区在线视频观看58 | 精品视频专区 | 欧美一区二区视频97 | 大胆欧美gogo免费视频一二区 | 国产伦精品一区二区三区四区视频 | 99久久精品国产网站 | 伊在线视频 | 免费观看日韩 | 五月婷婷综合在线观看 | 久久公开免费视频 | 亚洲第一成网站 | 欧美一区二区三区特黄 | 亚洲午夜精品在线观看 |