wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2633|回復: 0
收起左側

C++圖像拼接源程序

[復制鏈接]
ID:887902 發表于 2021-3-3 09:45 | 顯示全部樓層 |閱讀模式
自己做的圖像拼接程序
51hei.png 51hei.png DJI_0058.JPG

待拼接圖2

待拼接圖2

拼接圖

拼接圖


源程序如下:

  1. //根據輸入圖像srcImg及其角點坐標和篩選過的keypoints向量,拼接兩幅圖像,輸出拼接后的圖像及新圖像的角點

  2. class corners
  3. {

  4. public:
  5.         
  6.         Mat left_top,left_bottom,right_top,right_bottom;

  7.         
  8. };

  9. //圖像融合總函數
  10. void FuseImg(Mat srcImg1, corners srcImg1_in_srcImg1,
  11.                  Mat srcImg2, corners srcImg2_in_srcImg2,
  12.                  vector<KeyPoint> FilterdKeypoints,
  13.                          vector<KeyPoint> matchedFilterdKeypoints,
  14.                          Mat &dstImg, corners &dstimg_in_dstimg);


  15. ////將原圖像角點變換至目標圖像坐標系下,確保corners_be_transformed里的矩陣數據類型為float型
  16. void put_value_2_transformed_corners(vector<Mat> corners_2_be_transformed,
  17.                                          Mat H_inverted,
  18.                                                                          vector<Mat> &corners_be_transformed);


  19. //根據兩幅圖像在新圖像中的位置,確定平移量
  20. void get_transformation(vector<Mat> corner_srcImg1_in_dstImg,
  21.                             vector<Mat> corner_srcImg2_in_dstImg,
  22.                                                 Mat &trf);

  23. //根據輸入圖角點在最終圖中的位置向量和位移,更新輸入圖角點在最終圖中的位置類corners,保證坐標為int型
  24. void update_corners_in_dst(vector<Mat> corner_srcImg_in_dstImg,
  25.                                Mat trf, corners &mat_src_in_dst);

  26. //-----------------------------------------------計算dst的尺寸大小-----------------------------------------
  27. void cal_size_dstImg(vector<Mat> corner_srcImg1_in_dstImg,
  28.                      vector<Mat> corner_srcImg2_in_dstImg,
  29.                                          Mat trsf, int &rows_dst, int &cols_dst);

  30. //計算像素點權值
  31. float get_frac(int i_rows, int j_cols, corners corner_mat);

  32. //根據輸入圖像角點位置更新輸出圖像角點
  33. void get_union_corner(corners corner_mat_src1_in_dst, corners corner_mat_src2_in_dst, corners &corner_mat_dstImg_in_dstImg);

  34. //將srcImg變換至dstImg上
  35. void transf_srcImg2dst(Mat srcImg2, Mat transformation, vector<KeyPoint> FilterdKeypoints,  vector<KeyPoint> matchedFilterdKeypoints, Mat &dst);

  36. //用圖像src更新圖像dst
  37. void updateDstImg(Mat srcImg,corners corner_mat_src_in_dst, corners corner_mat_dst_in_dst,Mat &dstImg);
復制代碼
  1. #include<iostream>
  2. #include <cxcore.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. #include "opencv2/legacy/legacy.hpp"
  6. #include <E:\xunfei\stitch_sift20200330_vc10\stitch_sift20200330_vc10\runRansac.h>
  7. using namespace std;
  8. using namespace cv;

  9. /***************************** Function Prototypes ***************************/


  10. /**
  11.    Calculates a best-fit image transform from image feature correspondences
  12.    using RANSAC.
  13.    @ keyPoints,matchedkeyPoints 特征點
  14.    @ unFilteredMatches未篩選的特征匹配
  15.    @ n 匹配數
  16.    @ m 用來計算單應性矩陣的最少特征匹配數
  17.    @param p_badxform 模型允許的最大錯誤概率
  18.    @param err_tol 匹配誤差,通過單應性矩陣變換后,計算匹配誤差,在此誤差內,認為是內點
  19.    @param n_in 內點數
  20.    @filteredPoints, matchedFilteredPoints最終的內點序列
  21.    @filteredMatches,最終的特征匹配
  22.    @返回最終單應性矩陣
  23.    
  24. */
  25. extern void ransac_xform(  vector<KeyPoint> keyPoints,
  26.                                  vector<KeyPoint> matchedkeyPoints,
  27.                                                          vector<DMatch> unFilteredMatches,
  28.                                                          int n, int m,double p_badxform,double err_tol ,
  29.                                          int &n_in,
  30.                                                          vector<KeyPoint> &FilteredPoints,
  31.                                                          vector<KeyPoint> &matchedFilteredPoints,
  32.                                                          vector<DMatch> &FilteredMatches)
  33. {
  34.         n=(int)unFilteredMatches.size();
  35.         Mat M;//單應性矩陣
  36.         m=N;
  37.         DMatch sample[N];//暫存被隨機抽取到的匹配
  38.         DMatch* consensus;//當前一致集
  39.         DMatch* consensus_max = NULL;//當前最大一致集
  40.         double p, in_frac = RANSAC_INLIER_FRAC_EST;//p為當前計算出的模型的錯誤概率,當p小于p_badxform時迭代終止,in_frac為內點所占比例
  41.         //in為當前一致集元素個數,in_min為一致集中元素個數允許的最小值,保證RANSAC最終計算出的轉換矩陣錯誤的概率小于p_badxform所需的最小內點數目
  42.         //im_max為當前最優一致集中的元素個數
  43.         //k為迭代次數
  44.         //k_max為迭代次數最大值,即初始值
  45.         int i, in, in_min, in_max = 0, k = 0, k_max;
  46.         if(n<m)
  47.         {
  48.                 cout<<"實際匹配數小于計算模型需用的最小匹配數"<<endl;
  49.         }

  50.         srand( (int)time(NULL) );//初始化隨機數發生器
  51.         //計算保證RANSAC最終計算出的轉換矩陣錯誤的概率小于p_badxform所需的最小內點數目
  52.         in_min = calc_min_inliers( n, m, RANSAC_PROB_BAD_SUPP, p_badxform );
  53.         //計算k的最大值
  54.         k_max = calc_max_k(in_frac, p_badxform, m);
  55.         k=k_max;

  56.         for(int j=0;j<k;j++)
  57.         //for(int j=0;j<5;j++)
  58.         {
  59.                 //pts與mpts為之后要用到的m個隨機特征點對
  60.                 vector<Point2f> pts,mpts;
  61.                 //隨機選擇m(4)個匹配
  62.                 draw_ransac_sample( unFilteredMatches, m, n,sample );
  63.                 //提取m個匹配對應的特征點對
  64.                 extract_corresp_pts( keyPoints,matchedkeyPoints,sample, m, pts, mpts );
  65.                 //計算單應性矩陣M
  66.                 xform_fn( pts, mpts, M );
  67.                 //計算一致集和內點數
  68.                 consensus = new DMatch[n];
  69.                 in = find_consensus( keyPoints, matchedkeyPoints, unFilteredMatches, n, M, (double)err_tol, consensus);
  70.                 //更新最優一致集的元素個數和最優一致集
  71.                 if(in>in_max)
  72.                 {
  73.                         in_max = in;
  74.                         consensus_max=consensus;
  75.                         in_frac=((double)in_max)/((double)n);
  76.                 }
  77.                 else delete [] consensus;
  78.                 //根據當前最優一致集的元素個數是否大于要求的最小內點數,判斷是否繼續迭代
  79.                 if(in_max>in_min)
  80.                 {
  81.                         break;
  82.                 }
  83.                 //更新迭代次數k
  84.                 if(calc_max_k(in_frac, p_badxform, m)>5)
  85.                 {
  86.                         k = calc_max_k(in_frac, p_badxform, m);
  87.                 }
  88.         }
  89.         if(in_max>in_min)
  90.         {
  91.                 for(int j=0; j<in_max; j++)
  92.                 {
  93.                         FilteredPoints.push_back(keyPoints[consensus_max[j].queryIdx]);
  94.                         matchedFilteredPoints.push_back(matchedkeyPoints[consensus_max[j].trainIdx]);
  95.                         FilteredMatches.push_back(consensus_max[j]);
  96.                        
  97.                 }
  98.                 n_in=in_max;
  99.         }
  100.         else
  101.         {
  102.                 n_in=0;
  103.         }

  104. }

  105. //計算計算保證RANSAC最終計算出的轉換矩陣錯誤的概率小于p_badxform所需的最小內點數目
  106. static int calc_min_inliers( int n, int m, double p_badsupp, double p_badxform )
  107. {
  108.   double pi, sum;
  109.   int i, j;

  110.   for( j = m+1; j <= n; j++ )
  111.     {
  112.       sum = 0;
  113.       for( i = j; i <= n; i++ )
  114.         {
  115.           pi = (i-m) * log( p_badsupp ) + (n-i+m) * log( 1.0 - p_badsupp ) +
  116.             log_factorial( n - m ) - log_factorial( i - m ) -
  117.             log_factorial( n - i );
  118.           /*
  119.            * Last three terms above are equivalent to log( n-m choose i-m )
  120.            */
  121.           sum += exp( pi );
  122.         }
  123.       if( sum < p_badxform )
  124.         break;
  125.     }
  126.   return j;
  127. }

  128. //計算階乘的對數
  129. static inline double log_factorial( int n )
  130. {
  131.   double f = 0;
  132.   int i;

  133.   for( i = 1; i <= n; i++ )
  134.     f += log((double) i );

  135.   return f;
  136. }

  137. //計算迭代次數k的初始值,也是最大值,程序運行后不斷更新k;
  138. int calc_max_k(double in_frac, double p_badxform, int m)
  139. {
  140.         double p;
  141.         p=pow(in_frac, m);
  142.         p=1-p;
  143.         double s=0;
  144.         int i=0;
  145.         for(i=0;i<10000;i++)
  146.         {
  147.                 s=pow(p, i);
  148.                 if(s<p_badxform)
  149.                         break;
  150.         }
  151.         return i;
  152. }

  153. //隨機選擇四個匹配作為計算單應性矩陣的樣本值
  154. void draw_ransac_sample( vector<DMatch> unFilteredMatches, int m, int n, DMatch* sample )
  155. {
  156.         for(int i=0;i<m;i++)
  157.         {
  158.                 int id;
  159.                 for(int j=0;j<1000;j++)
  160.                 {
  161.                         id=rand()%n;
  162.                         if(id>(((int)unFilteredMatches.size())))
  163.                                 break;
  164.                 }
  165.                 sample[i]=unFilteredMatches[id];
  166.         }
  167. }

  168. //提取匹配關鍵點KeyPoints中的點坐標輸入到Point2f點對中
  169. void extract_corresp_pts( vector<KeyPoint> kpts,
  170.                               vector<KeyPoint> mkpts,
  171.                                                   DMatch* sample, int m,
  172.                                                   vector<Point2f> &pts,
  173.                                                   vector<Point2f> &mpts )
  174. {
  175.         for(int i=0;i<m;i++)
  176.         {
  177.                 pts.push_back( kpts[sample[i].queryIdx].pt);
  178.                 mpts.push_back( mkpts[sample[i].trainIdx].pt);
  179.         }

  180. }

  181. //根據4對匹配點坐標計算單應性矩陣
  182. void xform_fn( vector<Point2f> pts, vector<Point2f> mpts, Mat &M )
  183. {
  184.         Mat mat(8,8,CV_32FC1,Scalar::all(0));
  185.         Mat mat_invert(8,8,CV_32FC1,Scalar::all(0));
  186.         //初始化系數矩陣行0,2,4,6
  187.         for(int i_rows = 0; i_rows < 4; i_rows++)
  188.         {

  189.                 mat.at<float>(2*i_rows,0) = pts[i_rows].x;//0列

  190.                 mat.at<float>(2*i_rows,1) = pts[i_rows].y;//1列
  191.                
  192.                 mat.at<float>(2*i_rows,2) = 1.0;//2列
  193.                
  194.                 mat.at<float>(2*i_rows,3) = 0.0;//3列
  195.                
  196.                 mat.at<float>(2*i_rows,4) = 0.0;//4列
  197.                
  198.                 mat.at<float>(2*i_rows,5) = 0.0;//5列
  199.                
  200.                 mat.at<float>(2*i_rows,6) = -pts[i_rows].x*mpts[i_rows].x;//6列
  201.                
  202.                 mat.at<float>(2*i_rows,7) = -pts[i_rows].y*mpts[i_rows].x;//7列


  203.         }

  204.         //初始化系數矩陣行1,3,5,7
  205.         for(int i_rows = 0; i_rows<4; i_rows++)
  206.         {
  207.                
  208.                 mat.at<float>(1+2*i_rows,0) = 0.0;//0列
  209.                
  210.                 mat.at<float>(1+2*i_rows,1) = 0.0;//1列
  211.                
  212.                 mat.at<float>(1+2*i_rows,2) = 0.0;//2列
  213.                
  214.                 mat.at<float>(1+2*i_rows,3) = pts[i_rows].x;//3列
  215.                
  216.                 mat.at<float>(1+2*i_rows,4) = pts[i_rows].y;//4列
  217.                
  218.                 mat.at<float>(1+2*i_rows,5) = 1.0;//5列
  219.                
  220.                 mat.at<float>(1+2*i_rows,6) = -pts[i_rows].x*mpts[i_rows].y;//6列
  221.                
  222.                 mat.at<float>(1+2*i_rows,7) = -pts[i_rows].y*mpts[i_rows].y;//7列

  223.         }
  224.         invert(mat,mat_invert);
  225.        

  226.         //計算得到向量or數組
  227.         float vct_mat_invert[8][8],vctr2[8];
  228.         for(int i_rows=0; i_rows<8; i_rows++)
  229.         {
  230.                 for(int j_cols=0; j_cols<8; j_cols++)
  231.                 {
  232.                         vct_mat_invert[i_rows][j_cols] = mat_invert.at<float>(i_rows,j_cols);
  233.                 }
  234.         }
  235.         for(int id=0; id<4;id++)
  236.         {
  237.                 vctr2[id*2]   = mpts[id].x;
  238.                 vctr2[id*2+1] = mpts[id].y;
  239.         }

  240.         //計算homo
  241.         Mat homo(3,3,CV_32FC1,Scalar::all(0));
  242.         for(int i_rows = 0;i_rows < 3;i_rows++)
  243.         {
  244.                 for(int j_cols = 0; j_cols<3 ; j_cols++)
  245.                 {
  246.                         if((i_rows*3+j_cols) < 8)
  247.                         {
  248.                                 homo.at<float>(i_rows,j_cols) = calc_vct_in_prdct(vct_mat_invert[i_rows*3+j_cols], vctr2, 8);
  249.                         }
  250.                         else homo.at<float>(2,2)=1.0;
  251.                        
  252.                 }
  253.         }
  254.         M=homo;

  255. }
  256. //計算向量(or數組)內積
  257. float calc_vct_in_prdct(float* vctr1, float* vctr2, int dim)
  258. {
  259.          float VectorInnerProduct=0.0;
  260.          for(int j=0;j<dim;j++)
  261.          {
  262.                  VectorInnerProduct= VectorInnerProduct+vctr1[j]*vctr2[j];
  263.          }
  264.          return VectorInnerProduct;
  265. }

  266. //計算在單應性矩陣下,一對匹配特征點的像素距離的平方,即誤差平方,返回值即為誤差平方
  267. float err_fn( KeyPoint pot, KeyPoint mpot, Mat M )
  268. {
  269.          if((((int)M.rows)>3)||(((int)M.cols)>3))
  270.                  return 1000.0;
  271.          float point[3],matched_point[3];
  272.          point[0] = pot.pt.x;
  273.          point[1] = pot.pt.y;
  274.          point[2] = 1.0;

  275.          matched_point[0] = mpot.pt.x;
  276.          matched_point[1] = mpot.pt.y;
  277.          matched_point[2] = 1.0;
  278.          
  279.          float transformed_point[3] = {0.0,0.0,0.0};
  280.          for(int i=0; i<3; i++)
  281.          {
  282.                  for(int j=0; j<3;j++)
  283.                  {
  284.                          transformed_point[i] = transformed_point[i] + M.at<float>(i,j)*point[j];
  285.                  }
  286.          }
  287.          //變換后的像素坐標歸一化,即將各坐標都除以Z坐標
  288.          for(int j=0; j<3; j++)
  289.          {
  290.                  transformed_point[j] = transformed_point[j] / transformed_point[2];
  291.          }

  292.          float err_pixl_sqr = 0.0;
  293.          for(int i=0; i<3; i++)
  294.          {
  295.                  err_pixl_sqr = err_pixl_sqr + ( matched_point[i] - transformed_point[i] ) * ( matched_point[i] - transformed_point[i] );
  296.          }
  297.          return err_pixl_sqr;

  298. }

  299. //尋找一致集,返回一致集元素數
  300. int find_consensus( vector<KeyPoint> kpts, vector<KeyPoint> mkpts, vector<DMatch> uFMaches, int n, Mat M, int err_tol, DMatch* consensus)
  301. {
  302.         int num_matches = (int)uFMaches.size();
  303.         int num_consensus=0;
  304.         double err_sqr = pow((float)err_tol, 2);
  305.         for(int i=0; i<num_matches; i++)
  306.         {
  307.                 if(err_fn( kpts[uFMaches[i].queryIdx], mkpts[uFMaches[i].trainIdx],  M )<err_sqr)
  308.                 {
  309.                         *(consensus + num_consensus)=uFMaches[i];
  310.                         num_consensus++;
  311.                 }
  312.         }
  313.         return num_consensus;

  314. }
復制代碼

下載: 代碼stitch_sift20200421_vc10.7z (7.94 MB, 下載次數: 7)
圖片1.7z (16.18 MB, 下載次數: 5)
圖片2.7z (11.82 MB, 下載次數: 5)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
午夜美女久久久久爽久久| 三级网站在线看| 91黄色免费视频| 永久免费黄色片| 国产一二三区av| 国产精彩免费视频| 欧美国产激情视频| 无码人妻h动漫| 国产日韩一区二区在线观看| 欧美国产日韩激情| 成人av一级片| 亚洲综合在线网站| 精品综合久久久久| 无套白嫩进入乌克兰美女| 青娱乐国产精品视频| 日本少妇激三级做爰在线| 亚洲麻豆一区二区三区| 无码熟妇人妻av| 老熟妇一区二区| 最新黄色av网址| 久久99久久久| 精品久久久久久久久久久久久久久久久久| 天堂网视频在线| 国产免费黄色大片| 免费看黄网站在线观看| 2018中文字幕在线观看| 精品偷拍激情视频在线观看| 日本成址在线观看| 独立日3在线观看完整版| 成人午夜天堂| 男人天堂亚洲二区| 性网站在线观看| 国产不卡网站| 91丨精品丨国产| 欧美三级电影在线| 欧美精品三区| 九九视频精品免费| 国产日韩欧美激情| 精品国产91久久久久久| 欧美日本乱大交xxxxx| 亚洲国产日韩欧美综合久久| 色偷偷9999www| 日本一欧美一欧美一亚洲视频| 国产免费成人av| 欧美日本国产精品| 乱人伦xxxx国语对白| 波多野结衣电影免费观看| 亚洲色成人网站www永久四虎| 精品一区在线观看视频| 亚洲av人无码激艳猛片服务器| 黄片毛片在线看| seerx性欧美巨大| 超碰在线中文| 青青草视频在线免费直播| 97久久中文字幕| 久久人体视频| 美女脱光内衣内裤视频久久影院| av一区二区不卡| 亚洲妇女屁股眼交7| 精品嫩草影院久久| 久久久久久久久久久成人| 99三级在线| 欧美视频在线观看视频| 亚洲v在线观看| 日韩精品乱码久久久久久| 亚洲av无码一区二区三区dv| 在线看黄色网| 黄色在线视频观看网站| 校园春色亚洲色图| 日韩精品中文字幕第1页| 美女视频黄频大全不卡视频在线播放 | 在线播放毛片| 国产精品久久久久久久久免费高清| 亚洲免费福利一区| 日韩不卡手机在线v区| 中文字幕国产一区| 制服丝袜激情欧洲亚洲| 美日韩在线视频| 精品一区二区日本| 中文字幕在线视频精品| 懂色av.com| 翔田千里精品久久一区二| 欧美r片在线| 黄色亚洲网站| 欧美日韩1080p| 久久综合五月天婷婷伊人| 在线视频综合导航| 欧美乱人伦中文字幕在线| 国产成人精品免费视频大全最热 | 亚洲视频自拍偷拍| 国产主播喷水一区二区| 99久久99久久精品| 亚洲国产天堂av| 亚洲黄色小说网址| 九色porn| 国产成+人+综合+亚洲欧美| 国产精品第十页| 国产精品水嫩水嫩| 日韩国产激情在线| 91嫩草在线| xx欧美撒尿嘘撒尿xx| 久久综合综合久久| 国产免费一级| 4438x成人网全国最大| 国产亚洲一卡2卡3卡4卡新区| 调教一区二区| 日韩1区在线| 91毛片在线观看| 日韩精品一区二区三区视频在线观看| 琪琪第一精品导航| 日韩av高清在线看片| 国产女片a归国片aa| 欧美在线xxxx| av免费在线免费| 久久综合国产| 国产精品久久久久久久久久久免费看 | 亚洲综合色一区| 国产ts变态重口人妖hd| 九色中文视频| 国产亚洲字幕| 国产一区二区三区精品欧美日韩一区二区三区 | 日韩欧美在线免费观看视频| 国产无遮无挡120秒| 天堂电影院在线| 国产亚洲成av人片在线观看| 欧美日韩国内| 亚洲国产视频一区| 亚州精品天堂中文字幕| 缅甸午夜性猛交xxxx| 国产一级淫片a| 暧暧视频免费| 亚洲色图综合| 国产成人亚洲综合a∨猫咪| 日韩一区二区三区免费看| 亚洲一区二区久久久久久| 欧洲美女亚洲激情| 亚洲精品成人电影| 秋霞午夜在线观看| 极品中文字幕一区| 在线免费不卡电影| 91视频最新| 黄瓜视频污在线观看| 欧美性猛交一区二区三区| 美女网站视频在线| 久久久天天操| 日韩免费成人网| 日本免费一区二区三区| 老司机精品免费视频| 日本黄色免费网址| 麻豆精品久久| 久久久久国产精品免费免费搜索| 色琪琪综合男人的天堂aⅴ视频| 一区二区三区四区视频在线| 欧美黄色一区二区三区| 国产免费网址| 亚洲三级性片| 亚洲一二三四在线观看| 亚洲精品视频免费观看| 久久免费观看视频| 少妇一级淫免费放| 男人的天堂导航| 欧美电影免费观看高清完整| 粉嫩嫩av羞羞动漫久久久 | 国产精品第一页在线观看| h免费在线观看| 成人在线视频你懂的| 国产视频一区二区在线| 久久人人爽人人| 婷婷免费在线观看| 亚洲网站一区| 欧美美女日韩| 99re66热这里只有精品3直播| 北条麻妃在线一区二区| 青青草原成人网| 亚洲欧美另类视频| 午夜不卡影院| 99久久精品免费精品国产| 色综合久久88| www.四虎精品| 美女污污网站| 色综合中文网| 欧美在线你懂得| 日韩视频在线观看国产| 国产免费www| 欧美野外wwwxxx| 成人丝袜18视频在线观看| 久久999免费视频| 久久久久亚洲AV成人网人人小说| 人人在线视频| 欧美系列电影免费观看| 欧美日韩三级一区| 久久久久久久久影视| 亚洲乱色熟女一区二区三区| 精品欧美一区二区三区在线观看 | 久久成人资源| 亚洲欧美一区二区三区在线观看| 日本中文字幕伦在线观看| 首页综合国产亚洲丝袜| 在线视频精品一| 蜜桃福利午夜精品一区| 日日干夜夜操| 成人写真视频| 日韩欧美一区二区久久婷婷| 国产xxxx振车| 一日本道久久久精品国产| 免费观看亚洲天堂| 精品久久在线播放| 亚洲精品美女久久7777777| 在线观看av大片| 成人av三级| 一色桃子久久精品亚洲| www日韩av| 欧美视频xxxx| 在线观看网站免费入口在线观看国内 | 国产69精品久久久久9999apgf| 日韩欧美一区二区一幕| fc2ppv国产精品久久| 成年人午夜久久久| 亚洲成人精品一区| 亚洲国产精品毛片| 香蕉视频黄在线观看| 成人av影音| 69堂成人精品免费视频| 日本xxxxxxxxxx75| 自拍小视频在线观看| 先锋资源久久| 亚洲天堂成人在线视频| 国产黑丝在线视频| 嫩草影院2018| 久久99久久精品| 国产精品久久久| 免费毛片一区二区三区| gogo久久| 亚洲成人www| 成人在线免费高清视频| 国产九九九九| 午夜日韩av| 久久精品夜夜夜夜夜久久| 蜜臀久久99精品久久久久久| 福利成人在线观看| 久久久精品欧美丰满| 好吊色欧美一区二区三区视频| 在线观看亚洲一区二区| 日本亚洲欧洲无免费码在线| 日韩欧美中文免费| www.av91| 开心婷婷激情| 喷白浆一区二区| 欧美中文字幕在线视频| 91精品国产乱码久久久张津瑜| 忘忧草在线影院两性视频| 亚洲国产综合色| 日本男女交配视频| 欧洲有码在线视频| 狂野欧美一区| 国产精品久久中文| 中文字幕777| 另类图片第一页| 日韩电影大片中文字幕| 99久久人妻无码中文字幕系列| www.91在线| 综合av第一页| 高清无码视频直接看| 免费在线观看h| 免费看欧美女人艹b| 91美女高潮出水| 国产 欧美 自拍| 欧美xxav| 91国产精品91| 中日韩av在线| 欧美**vk| 欧美日韩国产第一页| 九九热在线免费观看| 国内不卡的一区二区三区中文字幕 | 亚洲视频在线免费观看| 欧美88888| 综合在线影院| 日韩欧美国产1| 欧美亚一区二区三区| 成人短视频在线观看| 欧美日韩国产在线| 91热视频在线观看| 亚洲午夜精品久久久久久高潮| 黄色在线论坛| 色欲综合视频天天天| 中日韩av在线播放| 在线观看免费黄视频| 一区二区三区日韩欧美| 国产最新免费视频| 日韩porn| 一个色综合av| 五月激情五月婷婷| 欧美人xxx| 在线亚洲一区观看| 久久久国产精品无码| 在线观看网站免费入口在线观看国内| 欧美视频一区在线观看| av免费观看不卡| 老司机深夜福利在线观看| 日韩欧美一区电影| 青青草原免费观看| 全国精品免费看| 91国内在线视频| 天堂中文资源在线观看| 亚洲免费网址| 麻豆av福利av久久av| 四虎成人免费影院| 久久久精品一区二区毛片免费看| 亚洲精品在线不卡| 久久精品国产成人av| 欧美午夜精彩| 成人免费福利在线| 国产大学生自拍视频 | 91视频入口| 成人精品gif动图一区| 国产精彩视频一区二区| 一二三中文字幕在线| 性久久久久久久久久久久| 伊人av在线播放| 欧美xxxx做受欧美护士| 亚洲欧美激情四射在线日| 亚洲午夜18毛片在线看| 日韩国产一区二区| 97人人做人人人难人人做| 黄瓜视频在线观看| 亚洲欧洲精品一区二区精品久久久| 色诱视频在线观看| 大黄网站在线观看| 日韩精品在线看| 中文字幕av片| 99精品国产99久久久久久福利| 久久国产精品亚洲va麻豆| 国产女优裸体网站| 五月综合激情网| 一级黄色性视频| 天堂一区二区三区四区| 国产精品99久久久久久久久| 国产精品最新乱视频二区| 久久久久久久免费视频了| 五月天开心婷婷| 成人免费黄色| 久久久久久久激情视频| 欧美色欧美亚洲另类| 91亚洲国产成人精品一区二三| 性刺激的欧美三级视频| 欧美日韩亚洲国产| 欧美激情a在线| 久久午夜宅男免费网站| 26uuu欧美| 无码人妻少妇色欲av一区二区| 精品欧美一区二区三区在线观看 | 日韩欧美亚洲精品| 视频在线不卡| 欧美一卡在线观看| 波多野结衣电影在线播放| 日日摸夜夜添夜夜添精品视频| 国产精品igao激情视频| 新版中文在线官网| 色偷偷偷综合中文字幕;dd| 亚洲日本香蕉视频| 国产网站一区二区三区| 50一60岁老妇女毛片| 女同另类激情重口| 成人免费看片网址| 亚洲最大黄色| 日韩午夜电影av| 国产乱淫片视频| 国产盗摄一区二区三区| 超碰在线免费av| 精品国产导航| 国产精品视频福利| 福利在线视频导航| 最新国产精品亚洲| 国产在线精选视频| 亚洲自拍欧美精品| 久久久精品人妻一区二区三区四| 在线观看视频免费一区二区三区| 自拍偷拍一区二区三区| 日韩成人伦理| 97视频在线观看视频免费视频| 干出白浆视频| 欧美少妇一区二区| 91午夜交换视频| 91尤物视频在线观看| 欧美 日本 国产| 一本到12不卡视频在线dvd| 制服丝袜综合日韩欧美| 精精国产xxx在线视频app| 五月天欧美精品| 国产在线免费视频| 日av在线不卡| www.51色.com| 日韩欧美一区二区三区在线视频| 涩涩涩999| 色在线视频观看| 国产免费一区二区三区在线能观看 | 91国产美女视频| 男男做性免费视频网| 亚洲精品电影在线| 欧美野外性xxxxfeexxxx|