青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-145  評論-173  文章-70  trackbacks-0

OpenCV 學習筆記

?

March 12, 2010

1. ?????? 關于數據基本類型的學習

參見代碼:

//2010 3 12 日, Demo 1?? OpenCV 的第一個例子

//author liuchang

#include <cv.h>

#include <iostream>

using namespace std;

int main()

{

???????? CvPoint p = cvPoint(1,3);// 針對整型的類型 CvPoint ,對應有構造函數 cvPoint ,注意大小寫

???????? cout << p.x << " " << p.y << endl;

???????? CvPoint2D32f p2 = cvPoint2D32f(12.34,43.45);

???????? cout << p2.x << " " << p2.y <<endl;

???????? CvPoint3D32f p3 = cvPoint3D32f(12.34,23.45,56.43);

???????? cout << p3.x << " " << p3.y << " " << p3.z << endl;

//=============================================================================

??? CvSize r = cvSize(3,4);??????????????????????????????????????????? // 長方形維數類型

???????? cout << r.width << " " <<r.height << endl;

???????? CvSize2D32f r2 = cvSize2D32f(23.45,34.56);

???????? cout << r2.width << " " << r2.height << endl;

//=============================================================================

???????? CvRect x = cvRect(3,4,12.34,45.56);

???????? cout << x.x << " " << x.y << " " << x.width << " " << x.height << endl;

?

???????? return 0;

}

總結:學習到集中基本的數據類型

1. ?????? 點的類型。包括二維和三維,而每一個坐標又可以分為整型和浮點型。其中對于二維,用 2D 來表示,對于三維,用 3D 來表示。具體的見代碼上,默認的 CvPoint 類型是一個二維的,整型參數的點。其他的見上。

2. ?????? 長方形維數類型。長方形已經固定時二維的類型,于是,形參就只用兩個,但是類型可以是整型和浮點型,于是又多了 CvSize2D32f 這種類型了。

3. ?????? 有偏移量的長方形維數類型。此時前面兩個形參就是偏移量的坐標,分別為 x y 。后面的就是寬和高了。注意,形參的類型都是整型,所以,如果像上面的代碼那樣,就會發生截斷處理,取整數部分,于是輸出結果就會有所不同。

4. ?????? 注意類型和構造函數的區別。看看,定義一個變量的時候,用的是類型,即: CvPoint,CvSize,CvRect 等等,而對這個類型的變量初始化的時候用的是對應的構造函數,于是是 cvPoint,cvSize,cvRect, 看到規律了嗎?類型的第一個首字母大寫,而構造函數則是對應的類型名的第一個字母小寫就可以了。因此, OpneCV 的這種命名方法還是很科學易記的。

附注: OpenCV 的安裝過程以及 Visual C++ 的配置方法:

1. ?????? 下載 OpenCV 并安裝。由于之前已經下載了 1.0 的版本,所以這里安裝的是 1.0 ,默認路徑安裝,并選擇注冊環境變量。

2. ?????? 檢查系統變量是否更改,盡管上面的選項可能會起作用,不過在我的系統中( Windows 7 ),環境變量還是沒有更改,于是,選擇高級系統設置 --- 環境變量 系統變量 —path— 編輯,就是在最后添加路徑 ”; C:\Program Files\OpenCV\bin”, 然后點擊確定退出。

3. ?????? 安裝完成后,并不意味著工作就結束了,還需要設定我們的編程環境。具體來說就是 Visual C++ 6.0 的設置。

?

Visual C++ 6.0 中設置 OpenCV 的步驟:

1. ?????? 選擇 tools---option, 在彈出的對話框中點擊 Directories 標簽,在 Show directories for 下拉選擇 Include files ,在 Directories 中添加路徑:

?? C:\Program Files\OpenCV\cxcore\include

?? C:\Program Files\OpenCV\cv\include

?? C:\Program Files\OpnCV\cvaux\include

?? C:\Program Files\OpenCV\otherlibs\highgui

?? C:\Program Files\OpenCV\otherlibs\cvcam\include

2. ?????? Show directories for 下拉列表框中選擇 Libarary files ,在 Directories 中添加路徑:

?? C:\Program Files\OpenCV\lib

3. ?????? Show directories for 下拉列表框中選擇 Executable files ,在 Directories 中添加路徑:

? C:\Program Files\OpenCV\bin

4. ?????? 配置完畢,退出。

?

配置完畢之后的測試程序( Demo1 ),就是前面的測試程序,編譯,運行, OK ,完全沒有問題,證明配置完畢!

?

?

?

GUI 命令

1. ?????? 使用到圖片處理,顯示,創建窗口等命令的時候,必須要在 Project—Setting 選項中設定相應的參數,否則可能會發生連接錯誤!這個不同于上面的 Demo1 ,因為 1 中僅僅是用到了一個數據類型,而沒有使用 CV 庫函數的功能,比如顯示,打開一個圖片,運用到第三方庫的話,肯定要調用 API 來實現功能,所以,鏈接庫的話,必須要加入,為此,可根據提示信息設置,一般的,進行圖像處理,都需要使用到這個。

?

2. ?????? 路徑的問題。先看看 Demo2 程序 :

#include <cv.h>

#include <highgui.h>

#include <stdio.h>

?

int main()

{

???????? IplImage* image = cvLoadImage("C:\\Users\\liuchang\\test1.bmp");

???????? if(!image){????????????????? // 如果加載失敗

?????????????????? printf("error: 導入圖片出錯,很可能是路徑出錯 !\n");

?????????????????? return 0;

???????? }

???????? cvNamedWindow("win1",CV_WINDOW_AUTOSIZE);??? // 創建一個窗口

???????? cvMoveWindow("win1",100,100);?????????? // 定位一個窗口

???????? cvShowImage("win1",image);??????????????????????????? // 在創建的窗口中顯示一個圖片

//????? cvWaitKey(0);?????????????????????????????????????? ???????? // 等待用戶輸入,否則一閃而過 , 看不到圖片

???????? cvReleaseImage(&image);????????????????????????????????? // 注意使用完后一定要釋放

???????? return 0;

}

此段程序中,功能很簡單,就是幫助用戶顯示一副圖片,運行程序,可以顯示出來一幅已經存在的圖片,而不需要任何的其他 API 來實現。在 OpenCV 中,處理圖像的函數很多,此處只是簡單的圖像顯示命令!

另外,上面的注釋很清楚的顯示了程序的各段代碼的功能,這里不再說明。對于具體的說明,后面還會繼續!需要注意的一點就是,路徑,需要兩個斜線,此處很重要,因為對于一個字符串,在作為路徑打開的時候,需要 ”\\” 才能夠被解釋為一個斜線,所以如果像上面直接給出路徑的話,需要指定是兩個斜線,否則會出錯!

OK ,下面試試從客戶端來輸入數據,即利用 main 函數可以從用戶輸入數據來編寫:

#include <cv.h>

#include <highgui.h>

#include <stdio.h>

#include <string.h>

?

int main(int argc, char **argv)

{

???????? char num[20];

???????? char getup[20];

???????? int i ;

???????? itoa(argc,num,10);

???????? puts(num);

???????? puts(argv[0]);

???????? puts(argv[1]);

???????? strcpy(getup,argv[1]);

??? for(i = 0; i < strlen(getup); i++)

?????????????????? putchar(getup[i]);

???????? putchar('\\');?????? // 輸出時一個斜線,而如果僅僅一個斜線的話,會報錯!

? ?????? IplImage* image = cvLoadImage(argv[1]);

???????? if(!image){????????????????? // 如果加載失敗

?????????????????? printf("error: 導入圖片出錯,很可能是路徑出錯 !\n");

?????????????????? return 0;

???????? }

???????? cvNamedWindow("win1",CV_WINDOW_AUTOSIZE);??? // 創建一個窗口

???????? cvMoveWindow("win1",100,100);?????????? // 定位一個窗口

???????? cvShowImage("win1",image);??????????????????????????? // 在創建的窗口中顯示一個圖片

???????? cvWaitKey(0);???????????????????????????????????????????????? // 等待用戶輸入,否則一閃而過 , 看不到圖片

???????? cvReleaseImage(&image);????????????????????????????????? // 注意使用完后一定要釋放

???????? return 0;

}

?

關于 main 函數參數的問題,在前面的說明中很清楚,不過這里需要再次說明:

首先, argc 讀入的是輸入參數的個數,比如這里輸入: test2? H:\ray.jpg ,那么讀取的 argc 的個數就是 2 ,而 argv 是一個數組,用來存放你輸入的參數,既然參數為 2 ,那么該數組就有兩個參數,一個 argv[0] ,即前面的那個程序名 test2 ,而后面的那個參數就是你讀入的那個路徑。注意的一點是:讀取后存放的路徑和你輸入的數據可能不同,具體來說就是,你輸入的是 :H:\ray.jpg ,而在機內存儲的這個字符串的內容是: H:\\ray.jpg ,也就是說,這個字符串是按照能夠正常顯示那個斜線符來設計的,也就是轉義字符設計的,讀入的數據將被轉換成正確的能夠表示的數據。從上面的驗證代碼中可以看到。

同時,計算 strlen(argv[1]) 也會發現,兩個斜線 ’\\’ 被解釋成一個字符!

對于, putchar(‘\\’) ,如果僅僅是一個斜線的話,會報錯誤,但是兩個的話就正常顯示一個 ’\’ 了。注意是表示的字符,用的單引號,所以,兩個斜線被解釋為一個字符。

Tips :如果輸入參數是: test2 H:\\ray.jpg ,還是可以正常運行的。

注記:和 C 庫函數不同,例如 open 函數,路徑是 open(“C:\test.c”,O_RDONLY); 這樣的話,里面就是一個斜線哦。所以 OpenCV 是不同的路徑寫法,一定要注意,還有上面解釋的那個輸入參數的問題,就 OK 了。

如果路徑不對,則會有下面提示信息:

H:\OPENCV\test4\test4.cpp(15) : warning C4129: 'O' : unrecognized character escape sequence

H:\OPENCV\test4\test4.cpp(15) : warning C4129: 'l' : unrecognized character escape sequence

所以,一定要加雙下劃線!

?

3. ?????? 輸入處理:

OpenCV 中如何響應鼠標事件呢?比如,如何響應點擊鼠標,如何響應鼠標被按下呢?

其實,只需要你實現下面 mouseHandler 這個方法就可以了:

void mouseHandler(int event,int x,int y,int flags, void *param)

{

???????? switch (event)

???????? {

???????? case CV_EVENT_LBUTTONDOWN:

?????????????????? if(flags & CV_EVENT_FLAG_CTRLKEY)

??????????????????????????? printf("Left button down with CTRL pressed!\n");

?????????????????? break;

???????? case CV_EVENT_LBUTTONUP:

?????????????????? printf("Left button up!\n");

?????????????????? break;

???????? }

}

那么,如何注冊鼠標監聽呢?看下面這段代碼:

???????? int mouserParam = 5;

???????? cvSetMouseCallback("win1",mouseHandler,&mouserParam);

也就是說,具體的實現監聽函數由 mouseHandler 來完成,而要注冊,也就是讓它何時監聽,監聽哪一個窗口,則需要用 cvSetMouseCallback 函數來實現,具體的參數,可查閱 API 文檔,當然,也可以由上面應用猜測出來。

上面的代碼很容易就實現了鼠標被點擊并且同時按下 CTRL 鍵的監聽動作和鼠標釋放的動作,當然,你還可以實現更多的功能,具體的就是使用 event 的判斷,以及和 flags 聯合實現的復合鍵判斷!

?

?

4. ?????? 前面講到了如何實現監聽鼠標事件,那么這里講下如何監聽鍵盤事件:

看看下面的代碼:

???????? int key ;

???????? key = cvWaitKey(0);????????????????????????????

???????? if(key == 'q'){

?????????????????? printf("quit\n");

?????????????????? return 0;

???????? }

上面這段代碼的意思就是不斷的等待輸入,如果輸入時 q 的話就退出程序,實驗之,發現有用。從這里引申下幾點:

(1) ?????? 對于 cvWaitKey 函數的參數,就是等待的毫秒數,如果是 0 ,則表示不斷的等待輸入,進入一個循環。而它的返回值,就是你按下的按鈕的鍵值。當然,如果要等待一定的時間,如果沒有輸入還是退出的話,可以采用 cvWaitKey(1000) 這樣的具體參數,這樣在等待的過程沒有輸入的話,還是可以正常退出,而不是想前面的循環在那里。

(2) ?????? 如果要實現不斷循環的話,可以采用下面的這個形式:

while(1){

?? key = cvWaitKey(10);

?? if(key == 27)

??????????? break;

?? switch(key){

?? case 'h':

??????????? break;

?? case 'i':

??????????? break;

?? }

}

這種方式也很好的實現了循環等待多重輸入的形式。

?

?

5. ?????? 如何處理拖動條事件:

上圖即拖動條,如何創建并響應該事件呢?

1. ?????? 創建:

int trackbarVal = 25;

int maxVal = 100;

cvCreateTrackbar("bar1","win1",&trackbarVal,maxVal,trackbarHandler);

這樣就設置了一個名稱為 bar1 的拖動條。

2. ?????? 響應事件:利用函數 trackbarHandler 來實現

void trackbarHandler(int pos)

{

printf("Trackbar position: %d\n",pos);

}

注意這個監聽是自動的。也就是說不需要自己進行任何的注冊,只要創建了,并且寫了這個函數,就可以實現自動的監聽,因為,在創建的函數中,最后的一個參數就是一個監聽的函數。

?

附記:完整的代碼如下:

#include <cv.h>

#include <highgui.h>

#include <stdio.h>

#include <string.h>

?

void mouseHandler(int event,int x,int y,int flags, void *param)

{

???????? switch (event)

???????? {

???????? case CV_EVENT_LBUTTONDOWN:

?????????????????? if(flags & CV_EVENT_FLAG_CTRLKEY)

??????????????????????????? printf("Left button down with CTRL pressed!\n");

?????????????????? break;

???????? case CV_EVENT_LBUTTONUP:

?????????????????? printf("Left button up!\n");

?????????????????? break;

???????? }

}

?

void trackbarHandler(int pos)

{

???????? printf("Trackbar position: %d\n",pos);

}

?

int main(int argc, char **argv)

{

// ??? char num[20];

// ??? char getup[20];

// ??? int i ;

// ??? itoa(argc,num,10);

// ??? puts(num);

// ??? puts(argv[0]);

// ??? puts(argv[1]);

// ??? strcpy(getup,argv[1]);

//???? for(i = 0; i < strlen(getup); i++)

// ???????????? putchar(getup[i]);

// ??? putchar('\\');

? ?????? IplImage* image = cvLoadImage(argv[1]);

???????? if(!image){????????????????? // 如果加載失敗

?????????????????? printf("error: 導入圖片出錯,很可能是路徑出錯 !\n");

?????????????????? return 0;

???????? }

???????? cvNamedWindow("win1",CV_WINDOW_AUTOSIZE);??? // 創建一個窗口

???????? cvMoveWindow("win1",100,100);?????????? // 定位一個窗口

???????? cvShowImage("win1",image);??????????????????????????? // 在創建的窗口中顯示一個圖片

// ??? int mouserParam = 5;

// ??? cvSetMouseCallback("win1",mouseHandler,&mouserParam);

// ??? int key ;

// ??? key = cvWaitKey(0);???????????????????????????? // 等待輸入,等待時間為 1000ms

// ??? if(key == 'q'){

// ???????????? printf("quit\n");

// ???????????? return 0;

// ??? }

???????? int trackbarVal = 25;

???????? int maxVal = 100;

???????? cvCreateTrackbar("bar1","win1",&trackbarVal,maxVal,trackbarHandler);

//????? int pos = cvGetTrackbarPos("bar1","win1");

//? int pos = cvGetTrackbarPos("bar1","win1");

//????? cvSetTrackbarPos("bar1","win1",25);

?

???????? cvWaitKey(0);???????????????????????????????????????????????? // 等待用戶輸入,否則一閃而過 , 看不到圖片

???????? cvReleaseImage(&image);????????????????????????????????? // 注意使用完后一定要釋放

???????? return 0;

}

?

posted on 2010-03-16 13:21 deercoder 閱讀(10834) 評論(7)  編輯 收藏 引用 所屬分類: OpenCV

評論:
# re: OpenCV學習筆記(一) 2010-03-16 17:03 | anon
建議支持學2.0  回復  更多評論
  
# re: OpenCV學習筆記(一) 2010-03-16 22:03 | 劉暢
@anon
謝謝,以前裝過2.0,不過嫌配置比較復雜就沒有做了,貌似最近官方網站有說明,有時間去看看。  回復  更多評論
  
# re: OpenCV學習筆記(一) 2010-03-29 00:30 | df
建議使用VC Express, 2005,2008,2010都好,因為VC6和C++標準不相容,編譯調試過程中可能會出現一些不可預知的問題。另外,新的OpenCV對C++增強不少,建議看看。  回復  更多評論
  
# re: OpenCV學習筆記(一) 2010-03-29 11:50 | 劉暢
@df
謝謝,有時間一定看看。  回復  更多評論
  
# re: OpenCV學習筆記(一) 2010-06-09 16:17 | Forsure
你好,文章寫得非常的好,雖然很早就學習了這些基礎內容,不過今天看了你的覺得還是收獲不少,我最近又回來搞opencv,希望可以一起討論交流。我的郵箱luanwpp#163.com,#號換成@。期待  回復  更多評論
  
# re: OpenCV學習筆記(一) 2011-04-29 23:55 | 鄭鄭鄭
"
4. 注意類型和構造函數的區別。看看,定義一個變量的時候,用的是類型,即: CvPoint,CvSize,CvRect 等等,而對這個類型的變量初始化的時候用的是對應的構造函數,于是是 cvPoint,cvSize,cvRect, 看到規律了嗎?類型的第一個首字母大寫,而構造函數則是對應的類型名的第一個字母小寫就可以了。因此, OpneCV 的這種命名方法還是很科學易記的。
"
cvPoint,cvSize,cvRect是構造函數?應該是結構體吧  回復  更多評論
  
# re: OpenCV學習筆記(一) 2011-05-25 10:38 | 劉暢
@鄭鄭鄭
CvPoint Point1; //類型
cvPoint() //構造函數
初始化CvPoint資料結構,為OpenCV常用資料結構
cvPoint(int型別row,int型別colunm)   回復  更多評論
  

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            免费成人高清| 99精品久久免费看蜜臀剧情介绍| 欧美精品国产一区| 久久国内精品自在自线400部| 亚洲国产精品热久久| 欧美一级理论性理论a| 99视频+国产日韩欧美| 在线观看欧美视频| 国产婷婷色一区二区三区| 欧美日韩理论| 欧美激情欧美激情在线五月| 久久精品国产亚洲精品| 亚洲男人的天堂在线aⅴ视频| 亚洲美女毛片| 最新国产精品拍自在线播放| 卡通动漫国产精品| 久久久久久夜| 久久精品国产亚洲一区二区| 亚洲欧美区自拍先锋| 这里只有精品丝袜| 日韩一区二区精品| 亚洲每日更新| 亚洲精选成人| 日韩亚洲欧美精品| 亚洲精品免费看| 亚洲毛片av| 99国内精品久久| 亚洲精品在线观看视频| 91久久精品日日躁夜夜躁欧美| 激情校园亚洲| 亚洲国产精品久久久久秋霞影院| 伊人久久男人天堂| 亚洲高清不卡av| 91久久精品美女高潮| 亚洲三级性片| 一区二区免费在线播放| 亚洲一本大道在线| 亚洲欧美怡红院| 久久精品免视看| 久久综合色婷婷| 欧美激情精品久久久久| 亚洲国产成人精品女人久久久 | 香蕉成人久久| 亚洲无限av看| 欧美一级淫片播放口| 欧美一区二区国产| 久久色在线观看| 毛片精品免费在线观看| 欧美精品1区2区| 欧美色欧美亚洲另类七区| 国产精品伦一区| 国产一区二区日韩精品欧美精品| 国产一区二区中文字幕免费看| 黑人中文字幕一区二区三区 | 久久九九精品| 久久最新视频| 欧美日韩在线精品| 国产老女人精品毛片久久| 国产综合婷婷| 亚洲乱码国产乱码精品精天堂 | 欧美日韩国产丝袜另类| 国产精品久久看| 尤物九九久久国产精品的特点| 亚洲精品乱码视频| 亚洲亚洲精品在线观看| 久久精品首页| 91久久久久久| 欧美一区二区三区免费观看| 美日韩精品免费观看视频| 欧美日韩专区| 影音先锋成人资源站| 在线亚洲欧美视频| 久久久91精品国产一区二区精品| 亚洲第一二三四五区| 亚洲午夜三级在线| 久久伊伊香蕉| 国产精品久久久一本精品| 亚洲第一色在线| 亚洲欧美一区二区视频| 欧美成人综合网站| 久久大逼视频| 日韩西西人体444www| 午夜精品成人在线| 欧美国产免费| 国语自产精品视频在线看一大j8| 亚洲精品美女久久7777777| 午夜视频在线观看一区二区三区| 欧美高清视频一区二区| 亚洲欧美日韩成人高清在线一区| 欧美11—12娇小xxxx| 国产日韩精品久久| 中文精品一区二区三区| 美女网站久久| 亚洲欧美精品在线| 欧美日本国产精品| 亚洲福利在线看| 久久网站热最新地址| 一本色道久久综合亚洲精品高清 | 欧美电影免费观看高清完整版| 国产精品一区久久久| 99在线精品视频| 欧美a级片网站| 欧美亚洲三区| 国产欧美va欧美va香蕉在| 一区二区欧美在线观看| 欧美激情精品久久久久久变态| 欧美一级理论片| 国产人成精品一区二区三| 亚洲综合视频一区| 亚洲毛片在线观看.| 农夫在线精品视频免费观看| 伊人久久成人| 噜噜噜91成人网| 欧美中文字幕在线| 国产亚洲午夜| 久久久久亚洲综合| 亚洲欧美国产精品桃花| 国产精品久久一区主播| 亚洲男人的天堂在线| 99国产精品一区| 欧美三级电影大全| 中文亚洲字幕| 一区二区欧美激情| 欧美午夜精品久久久久久浪潮| 一区二区av在线| 亚洲精品一区在线| 欧美日韩精品是欧美日韩精品| 日韩午夜视频在线观看| 亚洲激情成人在线| 欧美日本免费一区二区三区| 日韩午夜电影在线观看| 亚洲激精日韩激精欧美精品| 欧美国产日韩视频| 99riav1国产精品视频| 亚洲精品乱码久久久久| 欧美日韩免费一区| 亚洲免费婷婷| 午夜精品久久久久久久白皮肤| 国产欧美日韩免费看aⅴ视频| 久久激情中文| 久久久久国产精品一区| 亚洲电影av| 亚洲人成7777| 国产精品你懂得| 久久精品视频免费播放| 久久婷婷国产麻豆91天堂| 亚洲国产精品va| 亚洲另类自拍| 国产美女精品免费电影| 久久免费偷拍视频| 欧美国产日韩免费| 亚洲制服欧美中文字幕中文字幕| 亚洲欧美日韩成人| 在线精品视频一区二区三四| 亚洲国产精品毛片| 国产精品日韩精品欧美精品| 久久国产视频网| 毛片av中文字幕一区二区| 一区二区三区毛片| 欧美一级视频免费在线观看| 在线免费观看日本一区| 日韩视频在线一区二区| 国产亚洲aⅴaaaaaa毛片| 欧美顶级艳妇交换群宴| 欧美视频一区二区三区| 久久久久久综合网天天| 欧美精品电影| 久久激情视频| 欧美另类69精品久久久久9999| 香蕉视频成人在线观看| 美女视频黄 久久| 亚洲欧美日韩综合国产aⅴ| 久久精品欧美日韩| 亚洲深夜福利在线| 久久久噜噜噜久久| 亚洲午夜激情在线| 久久久九九九九| 亚洲一区二区在线看| 久久免费视频网| 亚洲欧美日韩在线高清直播| 久久天天综合| 午夜精品婷婷| 欧美精品三级日韩久久| 久久人人爽爽爽人久久久| 欧美日韩在线免费| 欧美激情精品久久久久久黑人| 国产乱肥老妇国产一区二| 亚洲人成人77777线观看| 国产一区二区三区丝袜| 在线亚洲激情| 日韩午夜激情电影| 久久久久欧美精品| 欧美一区二区三区在线播放| 欧美精品久久久久久久免费观看 | 亚洲成在人线av| 国产亚洲午夜| 亚洲亚洲精品在线观看| 99在线热播精品免费99热| 久久青青草原一区二区| 久久精品一区二区国产|