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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【计算机视觉】图像拼接技术

發布時間:2024/1/8 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【计算机视觉】图像拼接技术 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

圖像拼接在實際的應用場景很廣,比如無人機航拍,遙感圖像等等,圖像拼接是進一步做圖像理解基礎步驟,拼接效果的好壞直接影響接下來的工作,所以一個好的圖像拼接算法非常重要。

再舉一個身邊的例子吧,你用你的手機對某一場景拍照,但是你沒有辦法一次將所有你要拍的景物全部拍下來,所以你對該場景從左往右依次拍了好幾張圖,來把你要拍的所有景物記錄下來。那么我們能不能把這些圖像拼接成一個大圖呢?我們利用opencv就可以做到圖像拼接的效果!

比如我們有對這兩張圖進行拼接。

從上面兩張圖可以看出,這兩張圖有比較多的重疊部分,這也是拼接的基本要求。

那么要實現圖像拼接需要那幾步呢?簡單來說有以下幾步:

  • 對每幅圖進行特征點提取
  • 對對特征點進行匹配
  • 進行圖像配準
  • 把圖像拷貝到另一幅圖像的特定位置
  • 對重疊邊界進行特殊處理
  • 好吧,那就開始正式實現圖像配準。

    第一步就是特征點提取。現在CV領域有很多特征點的定義,比如sift、surf、harris角點、ORB都是很有名的特征因子,都可以用來做圖像拼接的工作,他們各有優勢。本文將使用ORB和SURF進行圖像拼接,用其他方法進行拼接也是類似的。

    基于SURF的圖像拼接

    用SIFT算法來實現圖像拼接是很常用的方法,但是因為SIFT計算量很大,所以在速度要求很高的場合下不再適用。所以,它的改進方法SURF因為在速度方面有了明顯的提高(速度是SIFT的3倍),所以在圖像拼接領域還是大有作為。雖說SURF精確度和穩定性不及SIFT,但是其綜合能力還是優越一些。下面將詳細介紹拼接的主要步驟。

    1.特征點提取和匹配

    特征點提取和匹配的方法我在上一篇文章《OpenCV探索之路(二十三):特征檢測和特征匹配方法匯總》中做了詳細的介紹,在這里直接使用上文所總結的SURF特征提取和特征匹配的方法。

    //提取特征點 SurfFeatureDetector Detector(2000); vector<KeyPoint> keyPoint1, keyPoint2; Detector.detect(image1, keyPoint1); Detector.detect(image2, keyPoint2);//特征點描述,為下邊的特征點匹配做準備 SurfDescriptorExtractor Descriptor; Mat imageDesc1, imageDesc2; Descriptor.compute(image1, keyPoint1, imageDesc1); Descriptor.compute(image2, keyPoint2, imageDesc2);FlannBasedMatcher matcher; vector<vector<DMatch> > matchePoints; vector<DMatch> GoodMatchePoints;vector<Mat> train_desc(1, imageDesc1); matcher.add(train_desc); matcher.train();matcher.knnMatch(imageDesc2, matchePoints, 2); cout << "total match points: " << matchePoints.size() << endl;// Lowe's algorithm,獲取優秀匹配點 for (int i = 0; i < matchePoints.size(); i++) {if (matchePoints[i][0].distance < 0.4 * matchePoints[i][1].distance){GoodMatchePoints.push_back(matchePoints[i][0]);} }Mat first_match; drawMatches(image02, keyPoint2, image01, keyPoint1, GoodMatchePoints, first_match); imshow("first_match ", first_match);

    2.圖像配準

    這樣子我們就可以得到了兩幅待拼接圖的匹配點集,接下來我們進行圖像的配準,即將兩張圖像轉換為同一坐標下,這里我們需要使用findHomography函數來求得變換矩陣。但是需要注意的是,findHomography函數所要用到的點集是Point2f類型的,所有我們需要對我們剛得到的點集GoodMatchePoints再做一次處理,使其轉換為Point2f類型的點集。

    vector<Point2f> imagePoints1, imagePoints2;for (int i = 0; i<GoodMatchePoints.size(); i++) {imagePoints2.push_back(keyPoint2[GoodMatchePoints[i].queryIdx].pt);imagePoints1.push_back(keyPoint1[GoodMatchePoints[i].trainIdx].pt); }

    這樣子,我們就可以拿著imagePoints1, imagePoints2去求變換矩陣了,并且實現圖像配準。值得注意的是findHomography函數的參數中我們選澤了CV_RANSAC,這表明我們選擇RANSAC算法繼續篩選可靠地匹配點,這使得匹配點解更為精確。

    //獲取圖像1到圖像2的投影映射矩陣 尺寸為3*3 Mat homo = findHomography(imagePoints1, imagePoints2, CV_RANSAC); 也可以使用getPerspectiveTransform方法獲得透視變換矩陣,不過要求只能有4個點,效果稍差 //Mat homo=getPerspectiveTransform(imagePoints1,imagePoints2); cout << "變換矩陣為:\n" << homo << endl << endl; //輸出映射矩陣 //圖像配準 Mat imageTransform1, imageTransform2; warpPerspective(image01, imageTransform1, homo, Size(MAX(corners.right_top.x, corners.right_bottom.x), image02.rows)); //warpPerspective(image01, imageTransform2, adjustMat*homo, Size(image02.cols*1.3, image02.rows*1.8)); imshow("直接經過透視矩陣變換", imageTransform1); imwrite("trans1.jpg", imageTransform1);

    3. 圖像拷貝

    拷貝的思路很簡單,就是將左圖直接拷貝到配準圖上就可以了。

    //創建拼接后的圖,需提前計算圖的大小 int dst_width = imageTransform1.cols; //取最右點的長度為拼接圖的長度 int dst_height = image02.rows;Mat dst(dst_height, dst_width, CV_8UC3); dst.setTo(0);imageTransform1.copyTo(dst(Rect(0, 0, imageTransform1.cols, imageTransform1.rows))); image02.copyTo(dst(Rect(0, 0, image02.cols, image02.rows)));imshow("b_dst", dst);

    4.圖像融合(去裂縫處理)

    從上圖可以看出,兩圖的拼接并不自然,原因就在于拼接圖的交界處,兩圖因為光照色澤的原因使得兩圖交界處的過渡很糟糕,所以需要特定的處理解決這種不自然。這里的處理思路是加權融合,在重疊部分由前一幅圖像慢慢過渡到第二幅圖像,即將圖像的重疊區域的像素值按一定的權值相加合成新的圖像。

    //優化兩圖的連接處,使得拼接自然 void OptimizeSeam(Mat& img1, Mat& trans, Mat& dst) {int start = MIN(corners.left_top.x, corners.left_bottom.x);//開始位置,即重疊區域的左邊界 double processWidth = img1.cols - start;//重疊區域的寬度 int rows = dst.rows;int cols = img1.cols; //注意,是列數*通道數double alpha = 1;//img1中像素的權重 for (int i = 0; i < rows; i++){uchar* p = img1.ptr<uchar>(i); //獲取第i行的首地址uchar* t = trans.ptr<uchar>(i);uchar* d = dst.ptr<uchar>(i);for (int j = start; j < cols; j++){//如果遇到圖像trans中無像素的黑點,則完全拷貝img1中的數據if (t[j * 3] == 0 && t[j * 3 + 1] == 0 && t[j * 3 + 2] == 0){alpha = 1;}else{//img1中像素的權重,與當前處理點距重疊區域左邊界的距離成正比,實驗證明,這種方法確實好 alpha = (processWidth - (j - start)) / processWidth;}d[j * 3] = p[j * 3] * alpha + t[j * 3] * (1 - alpha);d[j * 3 + 1] = p[j * 3 + 1] * alpha + t[j * 3 + 1] * (1 - alpha);d[j * 3 + 2] = p[j * 3 + 2] * alpha + t[j * 3 + 2] * (1 - alpha);}}}

    多嘗試幾張,驗證拼接效果

    測試一

    測試二

    測試三

    最后給出完整的SURF算法實現的拼接代碼。

    #include "highgui/highgui.hpp" #include "opencv2/nonfree/nonfree.hpp" #include "opencv2/legacy/legacy.hpp" #include <iostream> using namespace cv; using namespace std;void OptimizeSeam(Mat& img1, Mat& trans, Mat& dst);typedef struct {Point2f left_top;Point2f left_bottom;Point2f right_top;Point2f right_bottom; }four_corners_t;four_corners_t corners;void CalcCorners(const Mat& H, const Mat& src) {double v2[] = { 0, 0, 1 };//左上角double v1[3];//變換后的坐標值Mat V2 = Mat(3, 1, CV_64FC1, v2); //列向量Mat V1 = Mat(3, 1, CV_64FC1, v1); //列向量V1 = H * V2;//左上角(0,0,1)cout << "V2: " << V2 << endl;cout << "V1: " << V1 << endl;corners.left_top.x = v1[0] / v1[2];corners.left_top.y = v1[1] / v1[2];//左下角(0,src.rows,1)v2[0] = 0;v2[1] = src.rows;v2[2] = 1;V2 = Mat(3, 1, CV_64FC1, v2); //列向量V1 = Mat(3, 1, CV_64FC1, v1); //列向量V1 = H * V2;corners.left_bottom.x = v1[0] / v1[2];corners.left_bottom.y = v1[1] / v1[2];//右上角(src.cols,0,1)v2[0] = src.cols;v2[1] = 0;v2[2] = 1;V2 = Mat(3, 1, CV_64FC1, v2); //列向量V1 = Mat(3, 1, CV_64FC1, v1); //列向量V1 = H * V2;corners.right_top.x = v1[0] / v1[2];corners.right_top.y = v1[1] / v1[2];//右下角(src.cols,src.rows,1)v2[0] = src.cols;v2[1] = src.rows;v2[2] = 1;V2 = Mat(3, 1, CV_64FC1, v2); //列向量V1 = Mat(3, 1, CV_64FC1, v1); //列向量V1 = H * V2;corners.right_bottom.x = v1[0] / v1[2];corners.right_bottom.y = v1[1] / v1[2];}int main(int argc, char *argv[]) {Mat image01 = imread("g5.jpg", 1); //右圖Mat image02 = imread("g4.jpg", 1); //左圖imshow("p2", image01);imshow("p1", image02);//灰度圖轉換 Mat image1, image2;cvtColor(image01, image1, CV_RGB2GRAY);cvtColor(image02, image2, CV_RGB2GRAY);//提取特征點 SurfFeatureDetector Detector(2000); vector<KeyPoint> keyPoint1, keyPoint2;Detector.detect(image1, keyPoint1);Detector.detect(image2, keyPoint2);//特征點描述,為下邊的特征點匹配做準備 SurfDescriptorExtractor Descriptor;Mat imageDesc1, imageDesc2;Descriptor.compute(image1, keyPoint1, imageDesc1);Descriptor.compute(image2, keyPoint2, imageDesc2);FlannBasedMatcher matcher;vector<vector<DMatch> > matchePoints;vector<DMatch> GoodMatchePoints;vector<Mat> train_desc(1, imageDesc1);matcher.add(train_desc);matcher.train();matcher.knnMatch(imageDesc2, matchePoints, 2);cout << "total match points: " << matchePoints.size() << endl;// Lowe's algorithm,獲取優秀匹配點for (int i = 0; i < matchePoints.size(); i++){if (matchePoints[i][0].distance < 0.4 * matchePoints[i][1].distance){GoodMatchePoints.push_back(matchePoints[i][0]);}}Mat first_match;drawMatches(image02, keyPoint2, image01, keyPoint1, GoodMatchePoints, first_match);imshow("first_match ", first_match);vector<Point2f> imagePoints1, imagePoints2;for (int i = 0; i<GoodMatchePoints.size(); i++){imagePoints2.push_back(keyPoint2[GoodMatchePoints[i].queryIdx].pt);imagePoints1.push_back(keyPoint1[GoodMatchePoints[i].trainIdx].pt);}//獲取圖像1到圖像2的投影映射矩陣 尺寸為3*3 Mat homo = findHomography(imagePoints1, imagePoints2, CV_RANSAC);也可以使用getPerspectiveTransform方法獲得透視變換矩陣,不過要求只能有4個點,效果稍差 //Mat homo=getPerspectiveTransform(imagePoints1,imagePoints2); cout << "變換矩陣為:\n" << homo << endl << endl; //輸出映射矩陣 //計算配準圖的四個頂點坐標CalcCorners(homo, image01);cout << "left_top:" << corners.left_top << endl;cout << "left_bottom:" << corners.left_bottom << endl;cout << "right_top:" << corners.right_top << endl;cout << "right_bottom:" << corners.right_bottom << endl;//圖像配準 Mat imageTransform1, imageTransform2;warpPerspective(image01, imageTransform1, homo, Size(MAX(corners.right_top.x, corners.right_bottom.x), image02.rows));//warpPerspective(image01, imageTransform2, adjustMat*homo, Size(image02.cols*1.3, image02.rows*1.8));imshow("直接經過透視矩陣變換", imageTransform1);imwrite("trans1.jpg", imageTransform1);//創建拼接后的圖,需提前計算圖的大小int dst_width = imageTransform1.cols; //取最右點的長度為拼接圖的長度int dst_height = image02.rows;Mat dst(dst_height, dst_width, CV_8UC3);dst.setTo(0);imageTransform1.copyTo(dst(Rect(0, 0, imageTransform1.cols, imageTransform1.rows)));image02.copyTo(dst(Rect(0, 0, image02.cols, image02.rows)));imshow("b_dst", dst);OptimizeSeam(image02, imageTransform1, dst);imshow("dst", dst);imwrite("dst.jpg", dst);waitKey();return 0; }//優化兩圖的連接處,使得拼接自然 void OptimizeSeam(Mat& img1, Mat& trans, Mat& dst) {int start = MIN(corners.left_top.x, corners.left_bottom.x);//開始位置,即重疊區域的左邊界 double processWidth = img1.cols - start;//重疊區域的寬度 int rows = dst.rows;int cols = img1.cols; //注意,是列數*通道數double alpha = 1;//img1中像素的權重 for (int i = 0; i < rows; i++){uchar* p = img1.ptr<uchar>(i); //獲取第i行的首地址uchar* t = trans.ptr<uchar>(i);uchar* d = dst.ptr<uchar>(i);for (int j = start; j < cols; j++){//如果遇到圖像trans中無像素的黑點,則完全拷貝img1中的數據if (t[j * 3] == 0 && t[j * 3 + 1] == 0 && t[j * 3 + 2] == 0){alpha = 1;}else{//img1中像素的權重,與當前處理點距重疊區域左邊界的距離成正比,實驗證明,這種方法確實好 alpha = (processWidth - (j - start)) / processWidth;}d[j * 3] = p[j * 3] * alpha + t[j * 3] * (1 - alpha);d[j * 3 + 1] = p[j * 3 + 1] * alpha + t[j * 3 + 1] * (1 - alpha);d[j * 3 + 2] = p[j * 3 + 2] * alpha + t[j * 3 + 2] * (1 - alpha);}}}

    基于ORB的圖像拼接

    利用ORB進行圖像拼接的思路跟上面的思路基本一樣,只是特征提取和特征點匹配的方式略有差異罷了。這里就不再詳細介紹思路了,直接貼代碼看效果。

    #include "highgui/highgui.hpp" #include "opencv2/nonfree/nonfree.hpp" #include "opencv2/legacy/legacy.hpp" #include <iostream> using namespace cv; using namespace std;void OptimizeSeam(Mat& img1, Mat& trans, Mat& dst);typedef struct {Point2f left_top;Point2f left_bottom;Point2f right_top;Point2f right_bottom; }four_corners_t;four_corners_t corners;void CalcCorners(const Mat& H, const Mat& src) {double v2[] = { 0, 0, 1 };//左上角double v1[3];//變換后的坐標值Mat V2 = Mat(3, 1, CV_64FC1, v2); //列向量Mat V1 = Mat(3, 1, CV_64FC1, v1); //列向量V1 = H * V2;//左上角(0,0,1)cout << "V2: " << V2 << endl;cout << "V1: " << V1 << endl;corners.left_top.x = v1[0] / v1[2];corners.left_top.y = v1[1] / v1[2];//左下角(0,src.rows,1)v2[0] = 0;v2[1] = src.rows;v2[2] = 1;V2 = Mat(3, 1, CV_64FC1, v2); //列向量V1 = Mat(3, 1, CV_64FC1, v1); //列向量V1 = H * V2;corners.left_bottom.x = v1[0] / v1[2];corners.left_bottom.y = v1[1] / v1[2];//右上角(src.cols,0,1)v2[0] = src.cols;v2[1] = 0;v2[2] = 1;V2 = Mat(3, 1, CV_64FC1, v2); //列向量V1 = Mat(3, 1, CV_64FC1, v1); //列向量V1 = H * V2;corners.right_top.x = v1[0] / v1[2];corners.right_top.y = v1[1] / v1[2];//右下角(src.cols,src.rows,1)v2[0] = src.cols;v2[1] = src.rows;v2[2] = 1;V2 = Mat(3, 1, CV_64FC1, v2); //列向量V1 = Mat(3, 1, CV_64FC1, v1); //列向量V1 = H * V2;corners.right_bottom.x = v1[0] / v1[2];corners.right_bottom.y = v1[1] / v1[2];}int main(int argc, char *argv[]) {Mat image01 = imread("t1.jpg", 1); //右圖Mat image02 = imread("t2.jpg", 1); //左圖imshow("p2", image01);imshow("p1", image02);//灰度圖轉換 Mat image1, image2;cvtColor(image01, image1, CV_RGB2GRAY);cvtColor(image02, image2, CV_RGB2GRAY);//提取特征點 OrbFeatureDetector surfDetector(3000); vector<KeyPoint> keyPoint1, keyPoint2;surfDetector.detect(image1, keyPoint1);surfDetector.detect(image2, keyPoint2);//特征點描述,為下邊的特征點匹配做準備 OrbDescriptorExtractor SurfDescriptor;Mat imageDesc1, imageDesc2;SurfDescriptor.compute(image1, keyPoint1, imageDesc1);SurfDescriptor.compute(image2, keyPoint2, imageDesc2);flann::Index flannIndex(imageDesc1, flann::LshIndexParams(12, 20, 2), cvflann::FLANN_DIST_HAMMING);vector<DMatch> GoodMatchePoints;Mat macthIndex(imageDesc2.rows, 2, CV_32SC1), matchDistance(imageDesc2.rows, 2, CV_32FC1);flannIndex.knnSearch(imageDesc2, macthIndex, matchDistance, 2, flann::SearchParams());// Lowe's algorithm,獲取優秀匹配點for (int i = 0; i < matchDistance.rows; i++){if (matchDistance.at<float>(i, 0) < 0.4 * matchDistance.at<float>(i, 1)){DMatch dmatches(i, macthIndex.at<int>(i, 0), matchDistance.at<float>(i, 0));GoodMatchePoints.push_back(dmatches);}}Mat first_match;drawMatches(image02, keyPoint2, image01, keyPoint1, GoodMatchePoints, first_match);imshow("first_match ", first_match);vector<Point2f> imagePoints1, imagePoints2;for (int i = 0; i<GoodMatchePoints.size(); i++){imagePoints2.push_back(keyPoint2[GoodMatchePoints[i].queryIdx].pt);imagePoints1.push_back(keyPoint1[GoodMatchePoints[i].trainIdx].pt);}//獲取圖像1到圖像2的投影映射矩陣 尺寸為3*3 Mat homo = findHomography(imagePoints1, imagePoints2, CV_RANSAC);也可以使用getPerspectiveTransform方法獲得透視變換矩陣,不過要求只能有4個點,效果稍差 //Mat homo=getPerspectiveTransform(imagePoints1,imagePoints2); cout << "變換矩陣為:\n" << homo << endl << endl; //輸出映射矩陣 //計算配準圖的四個頂點坐標CalcCorners(homo, image01);cout << "left_top:" << corners.left_top << endl;cout << "left_bottom:" << corners.left_bottom << endl;cout << "right_top:" << corners.right_top << endl;cout << "right_bottom:" << corners.right_bottom << endl;//圖像配準 Mat imageTransform1, imageTransform2;warpPerspective(image01, imageTransform1, homo, Size(MAX(corners.right_top.x, corners.right_bottom.x), image02.rows));//warpPerspective(image01, imageTransform2, adjustMat*homo, Size(image02.cols*1.3, image02.rows*1.8));imshow("直接經過透視矩陣變換", imageTransform1);imwrite("trans1.jpg", imageTransform1);//創建拼接后的圖,需提前計算圖的大小int dst_width = imageTransform1.cols; //取最右點的長度為拼接圖的長度int dst_height = image02.rows;Mat dst(dst_height, dst_width, CV_8UC3);dst.setTo(0);imageTransform1.copyTo(dst(Rect(0, 0, imageTransform1.cols, imageTransform1.rows)));image02.copyTo(dst(Rect(0, 0, image02.cols, image02.rows)));imshow("b_dst", dst);OptimizeSeam(image02, imageTransform1, dst);imshow("dst", dst);imwrite("dst.jpg", dst);waitKey();return 0; }//優化兩圖的連接處,使得拼接自然 void OptimizeSeam(Mat& img1, Mat& trans, Mat& dst) {int start = MIN(corners.left_top.x, corners.left_bottom.x);//開始位置,即重疊區域的左邊界 double processWidth = img1.cols - start;//重疊區域的寬度 int rows = dst.rows;int cols = img1.cols; //注意,是列數*通道數double alpha = 1;//img1中像素的權重 for (int i = 0; i < rows; i++){uchar* p = img1.ptr<uchar>(i); //獲取第i行的首地址uchar* t = trans.ptr<uchar>(i);uchar* d = dst.ptr<uchar>(i);for (int j = start; j < cols; j++){//如果遇到圖像trans中無像素的黑點,則完全拷貝img1中的數據if (t[j * 3] == 0 && t[j * 3 + 1] == 0 && t[j * 3 + 2] == 0){alpha = 1;}else{//img1中像素的權重,與當前處理點距重疊區域左邊界的距離成正比,實驗證明,這種方法確實好 alpha = (processWidth - (j - start)) / processWidth;}d[j * 3] = p[j * 3] * alpha + t[j * 3] * (1 - alpha);d[j * 3 + 1] = p[j * 3 + 1] * alpha + t[j * 3 + 1] * (1 - alpha);d[j * 3 + 2] = p[j * 3 + 2] * alpha + t[j * 3 + 2] * (1 - alpha);}}}

    看一看拼接效果,我覺得還是不錯的。

    看一下這一組圖片,這組圖片產生了鬼影,為什么?因為兩幅圖中的人物走動了啊!所以要做圖像拼接,盡量保證使用的是靜態圖片,不要加入一些動態因素干擾拼接。

    opencv自帶的拼接算法stitch

    opencv其實自己就有實現圖像拼接的算法,當然效果也是相當好的,但是因為其實現很復雜,而且代碼量很龐大,其實在一些小應用下的拼接有點殺雞用牛刀的感覺。最近在閱讀sticth源碼時,發現其中有幾個很有意思的地方。

    1.opencv stitch選擇的特征檢測方式

    一直很好奇opencv stitch算法到底選用了哪個算法作為其特征檢測方式,是ORB,SIFT還是SURF?讀源碼終于看到答案。

    #ifdef HAVE_OPENCV_NONFREEstitcher.setFeaturesFinder(new detail::SurfFeaturesFinder()); #elsestitcher.setFeaturesFinder(new detail::OrbFeaturesFinder()); #endif

    在源碼createDefault函數中(默認設置),第一選擇是SURF,第二選擇才是ORB(沒有NONFREE模塊才選),所以既然大牛們這么選擇,必然是經過綜合考慮的,所以應該SURF算法在圖像拼接有著更優秀的效果。

    2.opencv stitch獲取匹配點的方式

    以下代碼是opencv stitch源碼中的特征點提取部分,作者使用了兩次特征點提取的思路:先對圖一進行特征點提取和篩選匹配(1->2),再對圖二進行特征點的提取和匹配(2->1),這跟我們平時的一次提取的思路不同,這種二次提取的思路可以保證更多的匹配點被選中,匹配點越多,findHomography求出的變換越準確。這個思路值得借鑒。

    matches_info.matches.clear();Ptr<flann::IndexParams> indexParams = new flann::KDTreeIndexParams(); Ptr<flann::SearchParams> searchParams = new flann::SearchParams();if (features2.descriptors.depth() == CV_8U) {indexParams->setAlgorithm(cvflann::FLANN_INDEX_LSH);searchParams->setAlgorithm(cvflann::FLANN_INDEX_LSH); }FlannBasedMatcher matcher(indexParams, searchParams); vector< vector<DMatch> > pair_matches; MatchesSet matches;// Find 1->2 matches matcher.knnMatch(features1.descriptors, features2.descriptors, pair_matches, 2); for (size_t i = 0; i < pair_matches.size(); ++i) {if (pair_matches[i].size() < 2)continue;const DMatch& m0 = pair_matches[i][0];const DMatch& m1 = pair_matches[i][1];if (m0.distance < (1.f - match_conf_) * m1.distance){matches_info.matches.push_back(m0);matches.insert(make_pair(m0.queryIdx, m0.trainIdx));} } LOG("\n1->2 matches: " << matches_info.matches.size() << endl);// Find 2->1 matches pair_matches.clear(); matcher.knnMatch(features2.descriptors, features1.descriptors, pair_matches, 2); for (size_t i = 0; i < pair_matches.size(); ++i) {if (pair_matches[i].size() < 2)continue;const DMatch& m0 = pair_matches[i][0];const DMatch& m1 = pair_matches[i][1];if (m0.distance < (1.f - match_conf_) * m1.distance)if (matches.find(make_pair(m0.trainIdx, m0.queryIdx)) == matches.end())matches_info.matches.push_back(DMatch(m0.trainIdx, m0.queryIdx, m0.distance)); } LOG("1->2 & 2->1 matches: " << matches_info.matches.size() << endl);

    這里我仿照opencv源碼二次提取特征點的思路對我原有拼接代碼進行改寫,實驗證明獲取的匹配點確實較一次提取要多。

    //提取特征點 SiftFeatureDetector Detector(1000); // 海塞矩陣閾值,在這里調整精度,值越大點越少,越精準 vector<KeyPoint> keyPoint1, keyPoint2; Detector.detect(image1, keyPoint1); Detector.detect(image2, keyPoint2);//特征點描述,為下邊的特征點匹配做準備 SiftDescriptorExtractor Descriptor; Mat imageDesc1, imageDesc2; Descriptor.compute(image1, keyPoint1, imageDesc1); Descriptor.compute(image2, keyPoint2, imageDesc2);FlannBasedMatcher matcher; vector<vector<DMatch> > matchePoints; vector<DMatch> GoodMatchePoints;MatchesSet matches;vector<Mat> train_desc(1, imageDesc1); matcher.add(train_desc); matcher.train();matcher.knnMatch(imageDesc2, matchePoints, 2);// Lowe's algorithm,獲取優秀匹配點 for (int i = 0; i < matchePoints.size(); i++) {if (matchePoints[i][0].distance < 0.4 * matchePoints[i][1].distance){GoodMatchePoints.push_back(matchePoints[i][0]);matches.insert(make_pair(matchePoints[i][0].queryIdx, matchePoints[i][0].trainIdx));} } cout<<"\n1->2 matches: " << GoodMatchePoints.size() << endl;#if 1FlannBasedMatcher matcher2; matchePoints.clear(); vector<Mat> train_desc2(1, imageDesc2); matcher2.add(train_desc2); matcher2.train();matcher2.knnMatch(imageDesc1, matchePoints, 2); // Lowe's algorithm,獲取優秀匹配點 for (int i = 0; i < matchePoints.size(); i++) {if (matchePoints[i][0].distance < 0.4 * matchePoints[i][1].distance){if (matches.find(make_pair(matchePoints[i][0].trainIdx, matchePoints[i][0].queryIdx)) == matches.end()){GoodMatchePoints.push_back(DMatch(matchePoints[i][0].trainIdx, matchePoints[i][0].queryIdx, matchePoints[i][0].distance));}} } cout<<"1->2 & 2->1 matches: " << GoodMatchePoints.size() << endl; #endif

    最后再看一下opencv stitch的拼接效果吧~速度雖然比較慢,但是效果還是很好的。

    #include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/stitching/stitcher.hpp> using namespace std; using namespace cv; bool try_use_gpu = false; vector<Mat> imgs; string result_name = "dst1.jpg"; int main(int argc, char * argv[]) {Mat img1 = imread("34.jpg");Mat img2 = imread("35.jpg");imshow("p1", img1);imshow("p2", img2);if (img1.empty() || img2.empty()){cout << "Can't read image" << endl;return -1;}imgs.push_back(img1);imgs.push_back(img2);Stitcher stitcher = Stitcher::createDefault(try_use_gpu);// 使用stitch函數進行拼接Mat pano;Stitcher::Status status = stitcher.stitch(imgs, pano);if (status != Stitcher::OK){cout << "Can't stitch images, error code = " << int(status) << endl;return -1;}imwrite(result_name, pano);Mat pano2 = pano.clone();// 顯示源圖像,和結果圖像imshow("全景圖像", pano);if (waitKey() == 27)return 0; }

    總結

    以上是生活随笔為你收集整理的【计算机视觉】图像拼接技术的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    亚洲视频免费在线 | 日韩精品一区二区免费 | 久久久久 免费视频 | 欧美久久久久久久久中文字幕 | 亚洲婷婷综合色高清在线 | 国产精品欧美久久久久无广告 | 免费观看丰满少妇做爰 | 天海冀一区二区三区 | 国产日韩中文字幕在线 | 国产精品综合久久久 | 国产成人三级在线 | 黄色网址在线播放 | 久久五月天色综合 | 天天操天天射天天添 | 色搞搞| 婷婷播播网| 精品成人国产 | 香蕉在线视频观看 | 国产一区免费在线观看 | 中文字幕久久精品一区 | 456成人精品影院 | 91久久国产精品 | 国产午夜精品久久 | 日本aaa在线观看 | 久久国产精品久久久久 | 狠狠色香婷婷久久亚洲精品 | 欧美性生交大片免网 | 成年人电影免费看 | 国产精品视频免费看 | 色综合色综合久久综合频道88 | 国产精品18久久久久久vr | 91.麻豆视频 | 日韩超碰在线 | 久久精品理论 | 夜夜操狠狠干 | www.亚洲精品在线 | 色永久免费视频 | 日韩免费av片 | 久久久国产成人 | 在线国产一区二区 | 日韩三级视频在线观看 | 日韩免费在线观看视频 | 国产精品一区二区三区四区在线观看 | 在线免费av网 | 成人在线播放av | 99精品热视频 | 色综合网| 欧美性色黄 | 色综合天天在线 | 亚洲精品日韩在线观看 | 亚洲丁香日韩 | 久久久久久久久久久影视 | 国产黄色精品在线 | 亚洲少妇激情 | 三级av免费观看 | 91中文字幕永久在线 | 亚洲精品乱码久久久久久写真 | 亚洲五月综合 | 亚洲一二三区精品 | 免费观看成人av | 特级毛片在线 | 国产精品久久久久av免费 | 中文在线 | 91视频下载 | 久久av中文字幕片 | 婷婷六月中文字幕 | 国产高清免费 | 亚洲va欧美va国产va黑人 | 五月天亚洲综合小说网 | 色婷五月 | 日韩欧美中文 | 久草在线免费新视频 | 国产精品免费一区二区 | www.亚洲黄色| 丁香六月久久综合狠狠色 | 97成人啪啪网 | 91色综合| 久久久国产精品亚洲一区 | 亚洲国产影院av久久久久 | 欧美精品一区二区在线播放 | 欧美日韩不卡一区二区三区 | 亚洲综合在 | 在线观看视频免费大全 | 91久久黄色| 精品久久久久久久久久久久久久久久 | 九九在线精品视频 | 亚洲精品国产品国语在线 | 免费亚洲精品视频 | 激情视频区 | 欧美精品少妇xxxxx喷水 | 国产成人精品在线观看 | 久久毛片高清国产 | 最新精品视频在线 | 五月天婷婷丁香花 | 日韩黄色免费电影 | 久久亚洲视频 | 午夜一级免费电影 | 日韩电影在线观看中文字幕 | 国产在线视频在线观看 | 成人久久18免费网站麻豆 | 亚洲女人av| 99精品在线免费视频 | 国产高清免费观看 | 日韩成人在线免费观看 | 国产精品久久久久久久av大片 | 五月的婷婷 | 国产精品电影在线 | 超碰电影在线观看 | a成人在线| av电影久久 | 在线观看免费中文字幕 | 一区二区三区在线观看 | 91福利在线观看 | 成人av在线网 | 狠狠色综合网站久久久久久久 | 国产不卡视频在线播放 | 欧美精品久久久久久久久久 | 99视频在线免费播放 | 欧美极品xxx | 久色 网| 麻豆国产网站 | 天天操天天射天天 | 六月久久婷婷 | 亚洲国产一区二区精品专区 | 91香蕉视频黄色 | 99久久精品国产一区二区三区 | 97超碰福利久久精品 | 中文字幕一区在线 | 中文字幕亚洲字幕 | 久久久激情视频 | 99久久久久久 | 久久一精品 | 中文字幕乱视频 | 国产精品观看视频 | 亚洲精品男女 | 国产一区二区三区在线 | 伊人超碰在线 | 亚洲精品国产精品国自产在线 | 激情丁香婷婷 | 久久夜靖品 | 久久久高清视频 | 日本丶国产丶欧美色综合 | 人人爽爽人人 | 丝袜美女在线观看 | 99这里都是精品 | 久久久精品国产免费观看一区二区 | 中文字幕有码在线播放 | 一区二区精品视频 | 国产又粗又猛又爽又黄的视频先 | 成人avav| 久久久久久久久久久黄色 | 中文字幕在线国产 | 五月天开心 | 亚洲视频999| 国产男女无遮挡猛进猛出在线观看 | 麻豆首页| 激情综合网在线观看 | 在线一区av | 一区二区三区日韩精品 | 91片黄在线观看 | 色综合久久久久久久久五月 | 91亚洲永久精品 | 天天操操操操操操 | 久久麻豆视频 | 日韩一区二区三区高清在线观看 | www.xxxx变态.com| 久久无码精品一区二区三区 | 男女免费视频观看 | 麻豆免费精品视频 | 九九热只有这里有精品 | 久久首页 | 成人久久免费 | 成人亚洲综合 | 国产色小视频 | 国产成人在线播放 | 日韩毛片久久久 | 日韩av在线免费播放 | 午夜影院先 | 免费a视频在线观看 | 精品久久91 | 中文字幕av免费 | 免费高清在线观看成人 | 激情五月婷婷综合网 | 精品国产91亚洲一区二区三区www | 激情五月五月婷婷 | 99久久99久久 | 国产精品9999久久久久仙踪林 | 黄色一级在线视频 | 狠狠狠狠狠色综合 | 成全免费观看视频 | 麻豆极品 | 欧美专区亚洲专区 | 免费看的黄色 | 日韩在线观看你懂得 | 国产999精品久久久久久麻豆 | 日韩性xxx| 夜色资源站国产www在线视频 | 亚洲久草在线 | 九九免费在线视频 | 久久99亚洲精品久久 | 亚洲精欧美一区二区精品 | 欧美 日韩 性 | 婷婷综合网 | 久久久免费精品 | 麻豆久久久 | 天天看天天干天天操 | 天天综合久久 | 国产精品美女网站 | 亚洲黄色免费网站 | 日批视频在线播放 | 天天干天天射天天爽 | 婷婷激情综合五月天 | 成人91在线观看 | 午夜精品一区二区三区在线播放 | 国产视频午夜 | 亚洲综合五月天 | 亚洲五月激情 | 黄色av电影在线 | 少妇bbbb揉bbbb日本 | 欧美孕妇视频 | 91视频久久久 | 亚洲人人射 | 国产精品剧情在线亚洲 | 五月宗合网 | 久久久在线观看 | 久久久国产精品一区二区三区 | 国产91精品一区二区 | 亚洲日本va午夜在线影院 | 国产成人精品午夜在线播放 | 国产精品刺激对白麻豆99 | 中文字幕在线观看免费高清完整版 | 91精品视频免费在线观看 | 精产嫩模国品一二三区 | 波多野结衣在线播放一区 | 精品国产精品一区二区夜夜嗨 | 久久在线一区 | 激情开心| 亚洲一二区视频 | 伊人日日干 | 欧美性久久久久久 | 亚洲精品播放 | 色在线视频网 | 国产在线自 | 欧美亚洲国产一卡 | 国产精品123 | 超碰在97 | 亚洲观看黄色网 | 免费精品久久久 | 欧美天堂视频在线 | 国产丝袜制服在线 | 国产麻豆视频在线观看 | 一区二区三区四区精品 | 五月天电影免费在线观看一区 | 成+人+色综合 | 免费日韩一区二区三区 | 国产亚洲欧美一区 | 久久精品91久久久久久再现 | 国产成人亚洲精品自产在线 | 久久高清国产 | av在线专区 | 国产精品区二区三区日本 | 精品亚洲视频在线观看 | 国内精品毛片 | 亚洲性xxxx| 天天干干| 伊人五月在线 | 国产 日韩 在线 亚洲 字幕 中文 | 久久综合狠狠综合久久综合88 | 一区二区三区在线播放 | 成年人免费看av | 国产爽妇网 | 欧美国产亚洲精品久久久8v | 99久久久国产免费 | 中文字幕在线电影 | 日韩视频在线观看视频 | 久久久国产精品麻豆 | 日韩一级黄色大片 | 欧美a级在线 | 欧美一性一交一乱 | 国产精品第三页 | 97超碰成人| 亚洲视频在线播放 | av在线一 | 久久免费视频网 | 91综合久久一区二区 | 免费一级片在线观看 | 激情五月综合 | 97爱爱爱 | 国产老熟 | 日韩免费一区二区在线观看 | 国产资源在线观看 | 亚洲一区二区三区在线看 | 综合色站导航 | 999久久久久 | 亚洲一区二区三区毛片 | 免费久久久| 国产精品18久久久久久久久 | 亚洲国产一区二区精品专区 | 国产香蕉视频 | 久久成人毛片 | 日本爱爱免费视频 | 国产精品不卡一区 | a黄色片| 999国内精品永久免费视频 | 日韩av女优视频 | 最近高清中文在线字幕在线观看 | 天天干夜夜想 | 水蜜桃亚洲一二三四在线 | 韩日精品视频 | 国产视频一二三 | www.久久免费视频 | 亚洲传媒在线 | 亚洲精品在线网站 | 日韩一级片大全 | 97视频在线观看成人 | 国产一区在线视频观看 | 国产91电影在线观看 | 特黄特色特刺激视频免费播放 | 日韩黄在线观看 | 国产成人a亚洲精品 | 一级黄毛片 | 亚州欧美精品 | 97理论电影 | 99久久婷婷国产 | 色综合久久综合中文综合网 | 国产福利一区二区在线 | 日韩区在线观看 | 天天操天天摸天天爽 | 99久久精品国产欧美主题曲 | 国产精品成人久久 | 国产精品久久久久久婷婷天堂 | 中文在线天堂资源 | 久久福利综合 | 四虎国产精品成人免费4hu | 69av国产| 国产精品久久一卡二卡 | 9999国产精品 | 久久免费视频在线观看30 | 在线观看视频国产 | 国产精品久久久一区二区 | 天天干夜夜爱 | 在线有码中文字幕 | 久久激情日本aⅴ | 91福利视频免费 | 久久成人免费电影 | 久久久久综合 | 91高清视频免费 | 国产视频精选 | 日韩高清不卡在线 | 国产精品久久久久久久免费 | 国产在线91在线电影 | 国产999精品久久久久久 | 人人澡人人爽 | 人人爽人人爽人人片 | 亚洲黄色软件 | 欧美激情亚洲综合 | 在线播放亚洲激情 | 国产一区二区在线播放视频 | 99精品系列 | 久久免费视频网 | 日日干天天操 | 免费a现在观看 | 日韩中文字幕在线看 | 深夜福利视频一区二区 | 国内精品久久久久久久久 | 免费一级片在线观看 | 中文在线a天堂 | 国产高清在线免费 | 免费a视频| 亚洲国产精品传媒在线观看 | 成年人视频在线免费观看 | 久久久久久国产精品久久 | 狠狠操在线 | 国产精品免费久久久久久 | 午夜精品导航 | 亚洲三级视频 | 国产视频在线免费 | 国产欧美精品一区二区三区四区 | 亚洲综合视频在线 | 久免费 | 99免费看片 | 香蕉影视 | 久久精品2 | 丁香视频免费观看 | 国产在线观看高清视频 | 天天操天天操天天操天天操天天操天天操 | 久久精品91久久久久久再现 | 日韩一区二区在线免费观看 | 99热在线国产 | 黄色av电影免费观看 | 国产老妇av | 91麻豆高清视频 | 亚洲网久久 | 99久久精品网 | av品善网| 91手机在线看片 | 久久理论影院 | 日韩精品一区二区三区在线视频 | 99视频国产精品免费观看 | 欧美日韩国产在线观看 | 亚洲欧美日韩国产精品一区午夜 | 国产精品女人久久久 | 手机av永久免费 | 日韩av快播电影网 | 九草视频在线 | 人人爽人人爽人人片av免 | 91传媒在线播放 | 一区二区精品国产 | 国产在线污| 久久精品视频在线观看免费 | 国内精品久久久久久久久 | 日产乱码一二三区别免费 | 久久精品视频3 | 欧美成人xxxxx | 深爱激情站 | 国际精品久久 | 国产色区 | 欧美黑吊大战白妞欧美 | 91视频88av | 狠狠综合网 | 久久成人精品视频 | 亚洲精品在线一区二区 | 91中文字幕在线观看 | 美女视频黄的免费的 | 日韩亚洲欧美中文字幕 | 九色精品免费永久在线 | 在线婷婷| 国产精品成人国产乱 | 99久久日韩精品免费热麻豆美女 | 二区三区在线视频 | 久久国产电影院 | 精品久久久亚洲 | 99精品热| 亚洲伊人色 | 黄色一级动作片 | 久草视频播放 | 丁香亚洲| 欧美亚洲国产一卡 | 五月天电影免费在线观看一区 | 午夜丰满寂寞少妇精品 | 国产小视频你懂的 | 免费视频91| 在线观看日本高清mv视频 | 国产亚洲精品美女久久 | 国产成人精品国内自产拍免费看 | 一性一交视频 | 国产99久久久国产精品成人免费 | 亚洲国产精品一区二区久久hs | 中文字幕一区二区三区久久 | 日本精品一区二区三区在线观看 | 99麻豆久久久国产精品免费 | 免费三级影片 | 日本久久久久 | 成年人视频免费在线播放 | 亚洲国产精品va在线看黑人动漫 | 国产99久久九九精品免费 | 亚洲精品字幕在线观看 | 国产精品免费视频久久久 | 国产在线日本 | 91精品网站 | 高清av中文字幕 | 久久久久女人精品毛片九一 | 亚洲国产精品va在线看黑人 | www91在线 | 最近在线中文字幕 | 色视频网站在线观看一=区 a视频免费在线观看 | 国产原创在线观看 | 毛片网站免费在线观看 | 国产高清在线永久 | 久久韩国免费视频 | 中文字幕电影在线 | 日韩精选在线观看 | 欧美日韩国产在线一区 | 亚洲精品字幕在线 | 亚洲精品永久免费视频 | 在线播放 日韩专区 | 国产aaa免费视频 | 国产a级片免费观看 | 成人中文字幕+乱码+中文字幕 | 99精品网站| 亚洲国产网站 | 久草视频首页 | 中文字幕人成乱码在线观看 | 91系列在线| 久久伊人五月天 | 99精品免费在线 | 亚洲在线视频免费观看 | 国产日韩在线播放 | 午夜狠狠操 | 日韩欧美在线视频一区二区三区 | 日日综合| 日韩女同一区二区三区在线观看 | 国产伦理精品一区二区 | 久久96| 色偷偷888欧美精品久久久 | a v在线视频 | 干干操操| 亚洲精品一区二区精华 | 天天操夜操 | 1024久久 | 国产成人在线一区 | 国产精国产精品 | 亚洲综合色丁香婷婷六月图片 | 五月综合色婷婷 | 国产精品久久一区二区三区, | 一区二区三区精品久久久 | 在线你懂 | 国产精品一区二区电影 | .国产精品成人自产拍在线观看6 | www.狠狠插.com | 欧美日本国产在线观看 | 欧美一级免费在线 | 91麻豆精品国产91久久久无限制版 | 国产伦精品一区二区三区在线 | 国产日产精品一区二区三区四区 | 伊人五月综合 | 欧美日韩中文字幕综合视频 | 成人免费观看在线视频 | 韩国av三级 | 久操久| 在线免费黄色毛片 | 手机看片中文字幕 | 精品在线你懂的 | 啪啪免费观看网站 | 久草精品视频在线播放 | 成人免费视频网 | 国产成人av | 亚洲欧美日韩中文在线 | 婷婷综合导航 | 婷婷五天天在线视频 | 亚洲精品午夜久久久 | 国产精品久久久区三区天天噜 | av成人免费在线观看 | 天天天天爱天天躁 | 国产成人一区二区啪在线观看 | 免费观看www视频 | 深爱婷婷网 | 天天综合操| 国内精品一区二区 | 久久久精品国产一区二区电影四季 | av免费成人 | 天天艹日日干 | 日本中文字幕系列 | 在线观看不卡视频 | 国产精品一区二区吃奶在线观看 | 国产精品女教师 | 久久久久看片 | 国产精品久久久久久超碰 | 四虎成人精品永久免费av九九 | 日韩电影精品一区 | 成年美女黄网站色大片免费看 | 色国产视频 | 国产精品99蜜臀久久不卡二区 | 国产一区视频在线播放 | 在线免费观看黄色 | 国产成人久久精品77777综合 | 在线成人国产 | 成人wwwxxx视频 | 亚洲欧美日韩一级 | 日韩一区正在播放 | 麻豆国产精品va在线观看不卡 | 中文字幕在线观看完整版 | 国产精品k频道 | 日本99热| 91精品久久久久久久久久入口 | 人人插人人做 | 亚洲黄网址 | 日韩大片在线免费观看 | 欧美男同视频网站 | 天天综合天天综合 | 亚洲国产精久久久久久久 | 99视频在线免费观看 | 色美女在线 | 久久久国产一区二区三区 | 成人在线观看资源 | 亚洲成人av在线播放 | 99久久久国产精品免费99 | 婷婷色5月 | 精品uu| 麻豆国产精品va在线观看不卡 | 色99之美女主播在线视频 | 精品视频久久 | 免费在线观看一区 | 91视频中文字幕 | 欧美日韩国产一区二区三区 | 中文字幕 成人 | 国产品久精国精产拍 | 91在线成人| 中文字幕国产在线 | 国产第一页在线观看 | 国产黄在线观看 | 亚洲三级性片 | 91综合视频在线观看 | 国产色秀视频 | 在线看国产精品 | 激情欧美一区二区三区免费看 | 成 人 免费 黄 色 视频 | 色欧美日韩 | 深夜免费福利在线 | 看片在线亚洲 | 99久e精品热线免费 99国产精品久久久久久久久久 | 天天激情 | 欧美一级xxxx | av丁香花 | 日韩精品一区二区三区水蜜桃 | 免费观看福利视频 | 亚洲爽爽网 | 国产91勾搭技师精品 | 日韩精品一区二区三区三炮视频 | 丁香婷婷亚洲 | www.天天成人国产电影 | 亚洲人人精品 | 美国三级黄色大片 | 色婷婷电影 | 午夜免费福利片 | 亚洲免费a | 色亚洲网 | 日韩中文字幕一区 | 午夜性生活片 | 69视频永久免费观看 | 国产香蕉在线 | 亚洲视频久久久久 | 天天色.com| 久久免费视频一区 | 亚洲精区二区三区四区麻豆 | 国内精品久久久久国产 | 中文字幕视频观看 | 日本黄色免费网站 | 狂野欧美激情性xxxx欧美 | 丝袜美腿亚洲综合 | 91大神一区二区三区 | 日韩久久精品一区二区三区下载 | 欧美精品久久人人躁人人爽 | 国产美女视频 | 日韩精品欧美专区 | 天天看天天干天天操 | 午夜性生活片 | 日韩欧美精品一区 | 四虎在线免费观看 | 一区二区三区精品久久久 | 色小说av | 国产中文 | 国产一二三在线视频 | 国产小视频你懂的 | 日韩在线观看你懂的 | 亚洲自拍自偷 | 亚洲精品三级 | 免费黄a | 人交video另类hd | 国产精品刺激对白麻豆99 | 激情av资源 | 91福利社区在线观看 | 免费看一级一片 | 欧美性生活一级片 | 六月丁香在线视频 | 亚洲精品视频免费在线观看 | 日韩高清网站 | 91免费高清视频 | 日韩电影中文字幕在线观看 | 亚洲精品播放 | 国产成人精品一区在线 | 国产精品区一区 | 欧美一级片免费在线观看 | 日本女人b | 欧美一区二视频在线免费观看 | 日韩av三区 | av色图天堂网 | 国产精品亚洲综合久久 | 国产精品网在线观看 | 国产正在播放 | 日本三级吹潮在线 | 日韩天堂网 | 欧美人操人 | 欧美激情综合五月色丁香小说 | 在线观看深夜福利 | 欧美极品一区二区三区 | 日本不卡视频 | 国产91影视 | 天天干夜夜 | 日日久视频 | 日本一区二区三区视频在线播放 | 日韩中文久久 | 日本久久久久久久久久久 | 久久伦理电影 | 亚洲国产精品成人精品 | 免费观看日韩 | 久久电影色 | 最新中文字幕在线资源 | 亚洲区视频在线 | 国产五月 | 久久超碰免费 | 国内精品久久久久久久久久久久 | 久久中文字幕视频 | 免费观看全黄做爰大片国产 | 人人爽人人片 | 99精品一级欧美片免费播放 | 国产精品精品视频 | 韩国视频一区二区三区 | 亚洲精品资源 | 国产亚洲91 | 欧美一级免费片 | 在线观看精品一区 | 国产精品成人免费一区久久羞羞 | 亚洲97在线 | 97在线观看免费高清完整版在线观看 | 成人国产电影在线观看 | av电影 一区二区 | 九九精品久久久 | 欧美一级乱黄 | 国产成人福利在线 | 国产精品免费视频久久久 | 免费看片网址 | 精品久久久久久国产91 | 免费福利在线播放 | 久热av在线 | 91tv国产成人福利 | 九九日九九操 | 黄色软件网站在线观看 | 91精品国 | 欧美激情精品久久久久久免费 | 国产一二三四在线观看视频 | 精品一区二区日韩 | 国产视频日韩 | 中文字幕亚洲欧美日韩 | 午夜av不卡 | 免费日韩三级 | 美女久久精品 | 天天操夜夜操 | 亚洲欧美国产精品久久久久 | 国产精品69久久久久 | www国产精品com| 天天做天天爱天天爽综合网 | avwww在线| 天天曰视频 | 在线精品播放 | 9草在线 | 久久九九影视网 | 久久爱综合 | 黄色免费在线看 | 最近中文字幕免费视频 | 超碰在线最新网址 | 中文字幕丝袜一区二区 | 激情丁香综合 | 果冻av在线 | 久亚洲精品 | 精品国产一区二区三区四区在线观看 | 综合国产在线观看 | 福利一区二区在线 | 亚洲最新视频在线播放 | 日韩免费电影一区二区三区 | 久艹在线播放 | 99欧美| 国产精品久久久久久久久蜜臀 | 狠狠躁18三区二区一区ai明星 | 成人av日韩 | 国产一线天在线观看 | 视频一区亚洲 | 午夜色大片在线观看 | 中文字字幕在线 | 婷婷中文字幕综合 | 亚洲最大成人免费网站 | 成人久久精品视频 | 亚洲午夜久久久久久久久久久 | 四虎天堂 | 国产视频美女 | 五月婷在线播放 | 男女拍拍免费视频 | 日韩中文免费视频 | 天堂av一区二区 | 日韩婷婷| 国产在线超碰 | 国产精品情侣视频 | 国产精品你懂的在线观看 | 欧美亚洲精品一区 | 欧美午夜a | 91精品国产一区二区在线观看 | 一区二区三区在线免费观看视频 | 国产精品久久久久久久久婷婷 | 黄色一二级片 | av大全在线| 超薄丝袜一二三区 | 在线观看深夜视频 | 在线中文字母电影观看 | 玖玖综合网 | 日韩在线免费观看视频 | 久久精品99国产精品酒店日本 | 日韩影片在线观看 | 婷婷在线播放 | 久久亚洲电影 | 国产最顶级的黄色片在线免费观看 | 欧美成人精品在线 | 久久女教师| 亚洲日本精品 | 精品久久福利 | 国产精品久久一区二区无卡 | 色综合久久久网 | av色综合网 | 欧美精选一区二区三区 | 国产精品美女在线观看 | 99久久er热在这里只有精品15 | 看片的网址 | 欧美日韩99 | 97超碰资源网 | 日日操日日插 | 亚洲经典视频 | 97在线视频免费看 | 一区二区免费不卡在线 | 人人添人人澡 | 亚洲精品中文字幕在线观看 | 国产精品久久久久一区二区国产 | 日韩高清在线看 | 久久国产精品二国产精品中国洋人 | 欧美日韩有码 | 黄网站大全 | 久久大片网站 | 中文字幕乱码日本亚洲一区二区 | 波多野结衣视频一区 | 久草视频在线资源站 | 美女免费视频一区二区 | 久久久激情网 | 欧美日韩在线第一页 | 久久人人爽人人爽人人片av免费 | 激情综合五月 | 久热电影 | 四虎国产精品成人免费影视 | 国产999 | 在线精品在线 | 亚洲激情小视频 | 国产在线第三页 | 国产黄色播放 | 成人一级片在线观看 | 97av在线视频 | 青青草国产精品 | 欧亚久久| 超碰免费在线公开 | 亚洲精品在线视频 | 国产视频精品久久 | 在线免费视频 你懂得 | 免费成人在线观看视频 | 天天射天天舔天天干 | 激情久久久久 | 国产在线精 | 麻豆视频入口 | 97av视频| 久久综合九色综合久99 | 黄色资源网站 | 日本韩国精品一区二区在线观看 | 国产精品视频全国免费观看 | 久久久久久久久久久黄色 | 91精品视屏 | 久久男人视频 | 欧美一级片在线播放 | 操夜夜操 | 日韩激情一二三区 | 亚洲欧美婷婷六月色综合 | 免费日韩一区二区 | 日韩一区正在播放 | 九九九热精品免费视频观看网站 | 欧美日韩一区二区视频在线观看 | 免费日韩av电影 | 久久免费看a级毛毛片 | 国产精品一区二区在线观看 | 2018好看的中文在线观看 | 久久亚洲国产精品 | 在线观av| 干干夜夜 | 天天干夜夜操视频 | 91福利视频一区 | 中文字幕一区二区三区乱码不卡 | 色妞色视频一区二区三区四区 | 天天射天天色天天干 | 中文字幕有码在线观看 | 99草视频 | 公开超碰在线 | 国产理论在线 | 五月天精品视频 | 成人亚洲精品久久久久 | 黄色亚洲免费 | 中文字幕在线播放视频 | av高清在线观看 | 高清精品在线 | 手机av在线不卡 | 涩涩在线| 天堂av网站 | av高清网站在线观看 | 人人爽久久久噜噜噜电影 | 成人免费共享视频 | 国产高清免费视频 | 国产成年人av | 久久国产视频网 | 婷婷六月丁香激情 | 精品久久网站 | 人人dvd| 欧美黑人性爽 | 日日干精品 | 免费成人在线电影 | 豆豆色资源网xfplay | www.午夜 | 久久综合五月婷婷 | 免费av视屏| 欧美精品一区二区蜜臀亚洲 | 91热视频在线观看 | 美女网站视频色 | 欧美肥妇free | 国产香蕉久久精品综合网 | 亚洲精品国产区 | 久久综合9988久久爱 | 久久久久久久久久久久久影院 | 国产精品一区电影 | 91中文字幕在线 | 伊人色**天天综合婷婷 | 欧美日韩一区二区三区免费视频 | 99中文字幕视频 | 亚洲精品国产精品乱码不99热 | 人人草在线观看 | 午夜体验区 | 色婷丁香 | 久久久久久久久影视 | 蜜桃视频日韩 | 四虎成人精品永久免费av | 探花视频免费观看 | 色爽网站 | 成人黄色免费观看 | 精品一区 在线 | 在线观看一级片 | 久草免费在线视频观看 | 在线免费黄色毛片 | 亚洲精品色视频 | 精品一区二区三区香蕉蜜桃 | 91精品国产91久久久久福利 | 国产精品一区二区久久 | 亚洲成色777777在线观看影院 | 天堂av色婷婷一区二区三区 | 国内99视频 | 九九在线视频免费观看 | 丁香亚洲| 日韩高清三区 | 麻豆传媒电影在线观看 | 国产少妇在线观看 | 亚洲精品午夜一区人人爽 | 又黄又爽又无遮挡免费的网站 | 欧美日韩免费在线观看视频 | 国产亚洲在线观看 | 色综合天天在线 | 久久国产亚洲精品 | 精品专区一区二区 | 欧美9999 | 久色婷婷 | 国产成人在线网站 | 91自拍成人| 久章草在线 | 日韩av在线免费播放 | 欧美韩国日本在线观看 | 成人午夜网址 | 日韩肉感妇bbwbbwbbw | 亚洲国产欧美一区二区三区丁香婷 | 久久黄色精品视频 | 国偷自产视频一区二区久 | 夜夜躁狠狠躁 | 成年人黄色大片在线 | 天天射日 | 亚洲免费不卡 | 亚洲精品456在线播放第一页 | 色视频网站在线观看一=区 a视频免费在线观看 | 91在线小视频 | 成年人黄色av | 亚洲高清av| 久久国产精品一区二区三区四区 | 中文字幕有码在线 | 久久性生活片 | 精品国产一区二区三区蜜臀 | 又黄又刺激视频 | 成人a大片 | av中文字幕免费在线观看 | 激情偷乱人伦小说视频在线观看 | 欧美91视频 | 成人一级黄色片 | 国产精品 日本 | 97国产在线视频 | 日本黄区免费视频观看 | 日本中文字幕网 | 草久视频在线 | 久久久久中文字幕 | 欧美日韩国产精品一区 | 视频二区在线 | 伊甸园av在线 | 成年人在线 | 99精品国产亚洲 | 日韩欧美v | 国产精品久久久久久一区二区 | 99久久这里有精品 | 久久国内精品99久久6app | 天天爱天天舔 | 日韩中文字幕视频在线 | 色婷婷成人 | 亚洲精品乱码久久久久久写真 | 日韩电影一区二区三区在线观看 | 欧美成人播放 |