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

隨筆-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 閱讀(10826) 評論(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)   回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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在线精品观看| 久久久国产91| 亚洲一区二区三区精品在线观看 | 欧美极品一区二区三区| 久久精品国产精品亚洲精品| 国外成人性视频| 国产一区二区三区在线观看网站| 国产精品家庭影院| 国产亚洲欧美一级| 亚洲国产精品电影在线观看| 亚洲日本理论电影| 亚洲欧美经典视频| 久久亚洲欧美| 中文欧美在线视频| 久久综合一区二区| 国产精品视频xxx| 亚洲第一黄网| 久久精品网址| 亚洲精品1区| 香蕉亚洲视频| 欧美日韩一级黄| 亚洲日本成人| 久久一区二区三区av| 在线中文字幕一区| 欧美精品videossex性护士| 国产精品任我爽爆在线播放| 亚洲成人在线网站| 久久天天狠狠| 欧美一级播放| 国产性天天综合网| 午夜一区二区三区在线观看| 日韩午夜激情av| 欧美日韩日本视频| 亚洲在线网站| 亚洲欧美日韩一区二区在线 | 久久在线播放| 精品电影在线观看| 国产在线播放一区二区三区| 揄拍成人国产精品视频| 亚洲一区bb| 久久久欧美精品sm网站| 久久先锋影音av| 亚洲国内自拍| 99re6热在线精品视频播放速度| 亚洲一区二区三区四区在线观看| 国产精品美女黄网| 免费成人高清| 国产精品jvid在线观看蜜臀| 久久五月天婷婷| 亚洲电影下载| 久久躁日日躁aaaaxxxx| 中文久久精品| 伊人久久成人| 在线看片成人| 亚洲人在线视频| 国产精品久久久一区二区三区| 亚洲人成小说网站色在线| 亚洲伦理一区| 免费观看一级特黄欧美大片| 亚洲欧美日韩天堂一区二区| 国产最新精品精品你懂的| 久久一二三区| 久久久91精品国产| 国产日韩欧美视频在线| 亚洲午夜小视频| 欧美一区二区久久久| 国产亚洲a∨片在线观看| 久久九九国产| 一区二区欧美在线观看| 男女激情久久| 日韩一区二区久久| 亚洲美女免费视频| 欧美日韩三级一区二区| 亚洲三级电影全部在线观看高清| 久久久一二三| 国产一区二区三区高清在线观看| 欧美一区国产一区| 欧美了一区在线观看| 一区二区三区高清| 国产精品毛片| 欧美成人午夜激情在线| 欧美精品麻豆| 亚洲已满18点击进入久久| 翔田千里一区二区| 亚洲乱码久久| 欧美日韩精品二区第二页| 欧美亚洲一区二区三区| 国产午夜精品一区二区三区视频| 欧美激情视频一区二区三区免费| 国产精品狠色婷| 欧美三级乱码| 性欧美精品高清| 久久久噜噜噜久久中文字幕色伊伊 | 久久久久久尹人网香蕉| 亚洲黑丝一区二区| 亚洲精品资源| 国产一本一道久久香蕉| 免费亚洲电影| 国产精品免费观看在线| 久久影院亚洲| 国产精品麻豆成人av电影艾秋| 美女日韩欧美| 国产精品你懂得| 亚洲国产高清一区| 国产精品一区久久久久| 亚洲国产精品成人综合| 国产区日韩欧美| 亚洲精品一区二区三区福利| 在线播放豆国产99亚洲| 欧美一级大片在线观看| 亚洲天堂av高清| …久久精品99久久香蕉国产| 99成人在线| 亚洲经典在线| 久久精品99久久香蕉国产色戒| 亚洲日韩第九十九页| 亚洲欧美综合国产精品一区| 日韩特黄影片| 久久综合给合久久狠狠狠97色69| 亚洲欧美在线磁力| 欧美日韩精品不卡| 亚洲激情在线| 在线观看欧美视频| 亚洲欧美日韩综合国产aⅴ| 一本久久青青| 欧美国产一区二区在线观看| 玖玖国产精品视频| 国内久久视频| 午夜精品偷拍| 欧美一区二区三区四区在线观看| 欧美精品在线观看播放| 欧美激情国产高清| 在线观看成人av| 久久久久9999亚洲精品| 久久婷婷av| 激情欧美一区| 久久久久综合网| 欧美a级片一区| 亚洲高清av| 欧美成人免费小视频| 欧美阿v一级看视频| 亚洲国产精品福利| 欧美电影在线观看| 亚洲精品国产日韩| 99爱精品视频| 欧美日韩在线播放三区四区| 亚洲日本激情| 亚洲欧美成人综合| 国产欧美日韩亚洲一区二区三区| 亚洲一区二区免费| 久久久久国产精品一区| 亚洲福利视频二区| 欧美精品一区二区高清在线观看| 亚洲精品字幕| 久久av红桃一区二区小说| 国产一区二区三区免费在线观看| 欧美一区视频| 亚洲第一天堂av| 亚洲一二区在线| 亚洲日韩欧美一区二区在线| 亚洲激情欧美激情| 欧美日韩午夜在线视频| 亚洲在线观看| 欧美成人乱码一区二区三区| 亚洲精选一区| 国产日韩精品一区二区| 久久综合狠狠综合久久激情| 亚洲日本aⅴ片在线观看香蕉| 午夜亚洲性色福利视频| 国产一区二区中文字幕免费看| 久久久久久有精品国产| 一本在线高清不卡dvd | 久久这里只有精品视频首页| 99天天综合性| 亚洲国产裸拍裸体视频在线观看乱了中文 | 日韩写真视频在线观看| 欧美一区二区女人| 亚洲黄色高清| 国产伦精品一区二区三区高清| 久久久噜久噜久久综合| 亚洲深夜影院| 欧美激情一区二区久久久| 亚洲一区二区久久| 在线精品国精品国产尤物884a| 欧美日韩卡一卡二| 久久亚洲精品网站| 亚洲午夜电影在线观看| 亚洲片在线资源| 老牛国产精品一区的观看方式| 在线亚洲一区二区| 在线播放中文字幕一区| 国产精品毛片一区二区三区 | 久久一区二区三区av| 亚洲无线观看| 亚洲美女网站| 亚洲二区在线观看| 国内精品久久久久伊人av| 国产精品mm| 欧美日韩第一页|