国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

防抖技術(shù) | OpenCV實(shí)現(xiàn)視頻穩(wěn)流

共 15640字,需瀏覽 32分鐘

 ·

2021-05-25 16:30

點(diǎn)擊上方小白學(xué)視覺(jué)”,選擇加"星標(biāo)"或“置頂

重磅干貨,第一時(shí)間送達(dá)

本文轉(zhuǎn)自|OpenCV學(xué)堂

這篇文章分享了一個(gè)視頻防抖的策略,這個(gè)方法同樣可以應(yīng)用到其他領(lǐng)域,比如常見(jiàn)的關(guān)鍵點(diǎn)檢測(cè),當(dāng)使用視頻測(cè)試時(shí),效果就沒(méi)有demo那么好,此時(shí)可以考慮本文的方法去優(yōu)化。

分享這些demo并不一定所有人都會(huì)用到,但是在解決實(shí)際問(wèn)題的時(shí)候,可以提供一個(gè)思路去解決問(wèn)題。希望能給我一個(gè)三連,鼓勵(lì)一下哈

在這篇文章中,我們將學(xué)習(xí)如何使用OpenCV庫(kù)中的點(diǎn)特征匹配技術(shù)來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的視頻穩(wěn)定器。我們將討論算法并且會(huì)分享代碼(python和C++版),以使用這種方法在OpenCV中設(shè)計(jì)一個(gè)簡(jiǎn)單的穩(wěn)定器。

視頻中低頻攝像機(jī)運(yùn)動(dòng)的例子

視頻防抖是指用于減少攝像機(jī)運(yùn)動(dòng)對(duì)最終視頻的影響的一系列方法。攝像機(jī)的運(yùn)動(dòng)可以是平移(比如沿著x、y、z方向上的運(yùn)動(dòng))或旋轉(zhuǎn)(偏航、俯仰、翻滾)。

視頻防抖的應(yīng)用

對(duì)視頻防抖的需求在許多領(lǐng)域都有。

這在消費(fèi)者和專業(yè)攝像中是極其重要的。因此,存在許多不同的機(jī)械、光學(xué)和算法解決方案。即使在靜態(tài)圖像拍攝中,防抖技術(shù)也可以幫助拍攝長(zhǎng)時(shí)間曝光的手持照片。

在內(nèi)窺鏡和結(jié)腸鏡等醫(yī)療診斷應(yīng)用中,需要對(duì)視頻進(jìn)行穩(wěn)定,以確定問(wèn)題的確切位置和寬度。

同樣,在軍事應(yīng)用中,無(wú)人機(jī)在偵察飛行中捕獲的視頻也需要進(jìn)行穩(wěn)定,以便定位、導(dǎo)航、目標(biāo)跟蹤等。同樣的道理也適用于機(jī)器人。

視頻防抖的不同策略

視頻防抖的方法包括機(jī)械穩(wěn)定方法、光學(xué)穩(wěn)定方法和數(shù)字穩(wěn)定方法。下面將簡(jiǎn)要討論這些問(wèn)題:

機(jī)械視頻穩(wěn)定:機(jī)械圖像穩(wěn)定系統(tǒng)使用由特殊傳感器如陀螺儀和加速度計(jì)檢測(cè)到的運(yùn)動(dòng)來(lái)移動(dòng)圖像傳感器以補(bǔ)償攝像機(jī)的運(yùn)動(dòng)。
光學(xué)視頻穩(wěn)定:在這種方法中,不是移動(dòng)整個(gè)攝像機(jī),而是通過(guò)鏡頭的移動(dòng)部分來(lái)實(shí)現(xiàn)穩(wěn)定。這種方法使用了一個(gè)可移動(dòng)的鏡頭組合,當(dāng)光通過(guò)相機(jī)的鏡頭系統(tǒng)時(shí),可以可變地調(diào)整光的路徑長(zhǎng)度。
數(shù)字視頻穩(wěn)定:這種方法不需要特殊的傳感器來(lái)估計(jì)攝像機(jī)的運(yùn)動(dòng)。主要有三個(gè)步驟:1)運(yùn)動(dòng)估計(jì)2)運(yùn)動(dòng)平滑,3)圖像合成。第一步導(dǎo)出了兩個(gè)連續(xù)坐標(biāo)系之間的變換參數(shù)。第二步過(guò)濾不需要的運(yùn)動(dòng),在最后一步重建穩(wěn)定的視頻。
在這篇文章中,我們將學(xué)習(xí)一個(gè)快速和魯棒性好的數(shù)字視頻穩(wěn)定算法的實(shí)現(xiàn)。它是基于二維運(yùn)動(dòng)模型,其中我們應(yīng)用歐幾里得(即相似性)變換包含平移、旋轉(zhuǎn)和縮放。

OpenCV Motion Models

正如你在上面的圖片中看到的,在歐幾里得運(yùn)動(dòng)模型中,圖像中的一個(gè)正方形可以轉(zhuǎn)換為任何其他位置、大小或旋轉(zhuǎn)不同的正方形。它比仿射變換和單應(yīng)變換限制更嚴(yán)格,但對(duì)于運(yùn)動(dòng)穩(wěn)定來(lái)說(shuō)足夠了,因?yàn)閿z像機(jī)在視頻連續(xù)幀之間的運(yùn)動(dòng)通常很小。

使用點(diǎn)特征匹配實(shí)現(xiàn)視頻防抖

該方法涉及跟蹤兩個(gè)連續(xù)幀之間的多個(gè)特征點(diǎn)。跟蹤特征允許我們估計(jì)幀之間的運(yùn)動(dòng)并對(duì)其進(jìn)行補(bǔ)償。

下面的流程圖顯示了基本步驟。

我們來(lái)看看這些步驟。

第一步:設(shè)置輸入和輸出視頻

首先,讓我們完成讀取輸入視頻和寫(xiě)入輸出視頻的設(shè)置。代碼中的注釋解釋每一行。

Python

# Import numpy and OpenCVimport numpy as npimport cv2
# Read input videocap = cv2.VideoCapture('video.mp4') 
# Get frame countn_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
# Get width and height of video streamw = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# Define the codec for output videofourcc = cv2.VideoWriter_fourcc(*'MJPG')
# Set up output videoout = cv2.VideoWriter('video_out.mp4', fourcc, fps, (w, h))

C++

 // Read input video  VideoCapture cap("video.mp4");
// Get frame count int n_frames = int(cap.get(CAP_PROP_FRAME_COUNT));
// Get width and height of video stream int w = int(cap.get(CAP_PROP_FRAME_WIDTH)); int h = int(cap.get(CAP_PROP_FRAME_HEIGHT));
// Get frames per second (fps) double fps = cap.get(CV_CAP_PROP_FPS);
// Set up output video VideoWriter out("video_out.avi", CV_FOURCC('M','J','P','G'), fps, Size(2 * w, h));


第二步:讀取第一幀并將其轉(zhuǎn)換為灰度圖

對(duì)于視頻穩(wěn)定,我們需要捕捉視頻的兩幀,估計(jì)幀之間的運(yùn)動(dòng),最后校正運(yùn)動(dòng)。

Python

# Read first frame_, prev = cap.read() 
# Convert frame to grayscaleprev_gray = cv2.cvtColor(prev, cv2.COLOR_BGR2GRAY)

C++

 // Define variable for storing frames  Mat curr, curr_gray;  Mat prev, prev_gray;
// Read first frame cap >> prev;
// Convert frame to grayscale cvtColor(prev, prev_gray, COLOR_BGR2GRAY);


第三步:尋找?guī)g的移動(dòng)

這是算法中最關(guān)鍵的部分。我們將遍歷所有的幀,并找到當(dāng)前幀和前一幀之間的移動(dòng)。沒(méi)有必要知道每一個(gè)像素的運(yùn)動(dòng)。歐幾里得運(yùn)動(dòng)模型要求我們知道兩個(gè)坐標(biāo)系中兩個(gè)點(diǎn)的運(yùn)動(dòng)。但是在實(shí)際應(yīng)用中,找到50-100個(gè)點(diǎn)的運(yùn)動(dòng),然后用它們來(lái)穩(wěn)健地估計(jì)運(yùn)動(dòng)模型是一個(gè)好方法。

3.1 可用于跟蹤的優(yōu)質(zhì)特征
現(xiàn)在的問(wèn)題是我們應(yīng)該選擇哪些點(diǎn)進(jìn)行跟蹤。請(qǐng)記住,跟蹤算法使用一個(gè)小補(bǔ)丁圍繞一個(gè)點(diǎn)來(lái)跟蹤它。這樣的跟蹤算法受到孔徑問(wèn)題的困擾,如下面的視頻所述

因此,光滑的區(qū)域不利于跟蹤,而有很多角的紋理區(qū)域則比較好。幸運(yùn)的是,OpenCV有一個(gè)快速的特征檢測(cè)器,可以檢測(cè)最適合跟蹤的特性。它被稱為goodFeaturesToTrack)

3.2 Lucas-Kanade光流
一旦我們?cè)谇耙粠姓业胶玫奶卣?,我們就可以使?strong>Lucas-Kanade光流算法在下一幀中跟蹤它們。

它是利用OpenCV中的calcOpticalFlowPyrLK函數(shù)實(shí)現(xiàn)的。在calcOpticalFlowPyrLK這個(gè)名字中,LK代表Lucas-Kanade,而Pyr代表金字塔。計(jì)算機(jī)視覺(jué)中的圖像金字塔是用來(lái)處理不同尺度(分辨率)的圖像的。

由于各種原因,calcOpticalFlowPyrLK可能無(wú)法計(jì)算出所有點(diǎn)的運(yùn)動(dòng)。例如,當(dāng)前幀的特征點(diǎn)可能會(huì)被下一幀的另一個(gè)對(duì)象遮擋。幸運(yùn)的是,您將在下面的代碼中看到,calcOpticalFlowPyrLK中的狀態(tài)標(biāo)志可以用來(lái)過(guò)濾掉這些值。

3.3 估計(jì)運(yùn)動(dòng)
回顧一下,在3.1步驟中,我們?cè)谇耙粠姓业搅艘恍┖玫奶卣?。在步驟3.2中,我們使用光流來(lái)跟蹤特征。換句話說(shuō),我們已經(jīng)找到了特征在當(dāng)前幀中的位置,并且我們已經(jīng)知道了特征在前一幀中的位置。所以我們可以使用這兩組點(diǎn)來(lái)找到映射前一個(gè)坐標(biāo)系到當(dāng)前坐標(biāo)系的剛性(歐幾里德)變換。這是使用函數(shù)estimateRigidTransform完成的。

一旦我們估計(jì)了運(yùn)動(dòng),我們可以把它分解成x和y的平移和旋轉(zhuǎn)(角度)。我們將這些值存儲(chǔ)在一個(gè)數(shù)組中,這樣就可以平穩(wěn)地更改它們。

下面的代碼將完成步驟3.1到3.3。請(qǐng)務(wù)必閱讀代碼中的注釋以進(jìn)行后續(xù)操作。

Python

# Pre-define transformation-store arraytransforms = np.zeros((n_frames-1, 3), np.float32) 
for i in range(n_frames-2): # Detect feature points in previous frame prev_pts = cv2.goodFeaturesToTrack(prev_gray, maxCorners=200, qualityLevel=0.01, minDistance=30, blockSize=3) # Read next frame success, curr = cap.read() if not success: break
# Convert to grayscale curr_gray = cv2.cvtColor(curr, cv2.COLOR_BGR2GRAY)
# Calculate optical flow (i.e. track feature points) curr_pts, status, err = cv2.calcOpticalFlowPyrLK(prev_gray, curr_gray, prev_pts, None)
# Sanity check assert prev_pts.shape == curr_pts.shape
# Filter only valid points idx = np.where(status==1)[0] prev_pts = prev_pts[idx] curr_pts = curr_pts[idx]
#Find transformation matrix m = cv2.estimateRigidTransform(prev_pts, curr_pts, fullAffine=False) #will only work with OpenCV-3 or less # Extract traslation dx = m[0,2] dy = m[1,2]
# Extract rotation angle da = np.arctan2(m[1,0], m[0,0]) # Store transformation transforms[i] = [dx,dy,da] # Move to next frame prev_gray = curr_gray
print("Frame: " + str(i) + "/" + str(n_frames) + " - Tracked points : " + str(len(prev_pts)))

C++

在c++實(shí)現(xiàn)中,我們首先定義一些類來(lái)幫助我們存儲(chǔ)估計(jì)的運(yùn)動(dòng)向量。下面的TransformParam類存儲(chǔ)了運(yùn)動(dòng)信息(dx -運(yùn)動(dòng)在x中,dy -運(yùn)動(dòng)在y中,da -角度變化),并提供了一個(gè)方法getTransform來(lái)將該運(yùn)動(dòng)轉(zhuǎn)換為變換矩陣。

struct TransformParam{  TransformParam() {}  TransformParam(double _dx, double _dy, double _da)   {      dx = _dx;      dy = _dy;      da = _da;  }
double dx; double dy; double da; // angle
void getTransform(Mat &T){ // Reconstruct transformation matrix accordingly to new values T.at<double>(0,0) = cos(da); T.at<double>(0,1) = -sin(da); T.at<double>(1,0) = sin(da); T.at<double>(1,1) = cos(da);
T.at<double>(0,2) = dx; T.at<double>(1,2) = dy; }};

在下面的代碼中,我們循環(huán)視頻幀并執(zhí)行步驟3.1到3.3。

// Pre-define transformation-store array  vector <TransformParam> transforms; 
// Mat last_T;
for(int i = 1; i < n_frames-1; i++) { // Vector from previous and current feature points vector <Point2f> prev_pts, curr_pts;
// Detect features in previous frame goodFeaturesToTrack(prev_gray, prev_pts, 200, 0.01, 30);
// Read next frame bool success = cap.read(curr); if(!success) break; // Convert to grayscale cvtColor(curr, curr_gray, COLOR_BGR2GRAY);
// Calculate optical flow (i.e. track feature points) vector <uchar> status; vector <float> err; calcOpticalFlowPyrLK(prev_gray, curr_gray, prev_pts, curr_pts, status, err);
// Filter only valid points auto prev_it = prev_pts.begin(); auto curr_it = curr_pts.begin(); for(size_t k = 0; k < status.size(); k++) { if(status[k]) { prev_it++; curr_it++; } else { prev_it = prev_pts.erase(prev_it); curr_it = curr_pts.erase(curr_it); } }
// Find transformation matrix Mat T = estimateRigidTransform(prev_pts, curr_pts, false);
// In rare cases no transform is found. // We'll just use the last known good transform. if(T.data == NULL) last_T.copyTo(T); T.copyTo(last_T);
// Extract traslation double dx = T.at<double>(0,2); double dy = T.at<double>(1,2); // Extract rotation angle double da = atan2(T.at<double>(1,0), T.at<double>(0,0));
// Store transformation transforms.push_back(TransformParam(dx, dy, da));
// Move to next frame curr_gray.copyTo(prev_gray);
cout << "Frame: " << i << "/" << n_frames << " - Tracked points : " << prev_pts.size() << endl; }


第四步:計(jì)算幀之間的平滑運(yùn)動(dòng)

在前面的步驟中,我們估計(jì)幀之間的運(yùn)動(dòng)并將它們存儲(chǔ)在一個(gè)數(shù)組中。我們現(xiàn)在需要通過(guò)疊加上一步估計(jì)的微分運(yùn)動(dòng)來(lái)找到運(yùn)動(dòng)軌跡。

步驟4.1:軌跡計(jì)算

在這一步,我們將增加運(yùn)動(dòng)之間的幀來(lái)計(jì)算軌跡。我們的最終目標(biāo)是平滑這條軌跡。

Python 在Python中,可以很容易地使用numpy中的cumsum(累計(jì)和)來(lái)實(shí)現(xiàn)。

# Compute trajectory using cumulative sum of transformationstrajectory = np.cumsum(transforms, axis=0

C++

在c++中,我們定義了一個(gè)名為T(mén)rajectory的結(jié)構(gòu)體來(lái)存儲(chǔ)轉(zhuǎn)換參數(shù)的累積和。

struct Trajectory{    Trajectory() {}    Trajectory(double _x, double _y, double _a) {        x = _x;        y = _y;        a = _a;    }
double x; double y; double a; // angle};

C我們還定義了一個(gè)函數(shù)cumsum,它接受一個(gè)TransformParams 向量,并通過(guò)執(zhí)行微分運(yùn)動(dòng)dx、dy和da(角度)的累積和返回軌跡。

vector<Trajectory> cumsum(vector<TransformParam> &transforms){  vector <Trajectory> trajectory; // trajectory at all frames  // Accumulated frame to frame transform  double a = 0;  double x = 0;  double y = 0;
for(size_t i=0; i < transforms.size(); i++) { x += transforms[i].dx; y += transforms[i].dy; a += transforms[i].da;
trajectory.push_back(Trajectory(x,y,a));
}
return trajectory; }

步驟4.2:計(jì)算平滑軌跡

在上一步中,我們計(jì)算了運(yùn)動(dòng)軌跡。所以我們有三條曲線來(lái)顯示運(yùn)動(dòng)(x, y,和角度)如何隨時(shí)間變化。

在這一步,我們將展示如何平滑這三條曲線。

平滑任何曲線最簡(jiǎn)單的方法是使用移動(dòng)平均濾波器(moving average filter)。顧名思義,移動(dòng)平均過(guò)濾器將函數(shù)在某一點(diǎn)上的值替換為由窗口定義的其相鄰函數(shù)的平均值。讓我們看一個(gè)例子。

假設(shè)我們?cè)跀?shù)組c中存儲(chǔ)了一條曲線,那么曲線上的點(diǎn)是c[0]…c[n-1]。設(shè)f是我們通過(guò)寬度為5的移動(dòng)平均濾波器過(guò)濾c得到的平滑曲線。

該曲線的k^{th}元素使用

如您所見(jiàn),平滑曲線的值是噪聲曲線在一個(gè)小窗口上的平均值。下圖顯示了左邊的噪點(diǎn)曲線的例子,使用右邊的尺度為5 濾波器進(jìn)行平滑。

Python

在Python實(shí)現(xiàn)中,我們定義了一個(gè)移動(dòng)平均濾波器,它接受任何曲線(即1-D的數(shù)字)作為輸入,并返回曲線的平滑版本。

def movingAverage(curve, radius):   window_size = 2 * radius + 1  # Define the filter   f = np.ones(window_size)/window_size   # Add padding to the boundaries   curve_pad = np.lib.pad(curve, (radius, radius), 'edge')   # Apply convolution   curve_smoothed = np.convolve(curve_pad, f, mode='same')   # Remove padding   curve_smoothed = curve_smoothed[radius:-radius]  # return smoothed curve  return curve_smoothed

我們還定義了一個(gè)函數(shù),它接受軌跡并對(duì)這三個(gè)部分進(jìn)行平滑處理。

def smooth(trajectory):   smoothed_trajectory = np.copy(trajectory)   # Filter the x, y and angle curves  for i in range(3):    smoothed_trajectory[:,i] = movingAverage(trajectory[:,i], radius=SMOOTHING_RADIUS)
return smoothed_trajectory
這是最后去使用
# Compute trajectory using cumulative sum of transformationstrajectory = np.cumsum(transforms, axis=0)

C++

在c++版本中,我們定義了一個(gè)名為smooth的函數(shù),用于計(jì)算平滑移動(dòng)平均軌跡。

vector <Trajectory> smooth(vector <Trajectory>& trajectory, int radius){  vector <Trajectory> smoothed_trajectory;   for(size_t i=0; i < trajectory.size(); i++) {      double sum_x = 0;      double sum_y = 0;      double sum_a = 0;      int count = 0;
for(int j=-radius; j <= radius; j++) { if(i+j >= 0 && i+j < trajectory.size()) { sum_x += trajectory[i+j].x; sum_y += trajectory[i+j].y; sum_a += trajectory[i+j].a;
count++; } }
double avg_a = sum_a / count; double avg_x = sum_x / count; double avg_y = sum_y / count;
smoothed_trajectory.push_back(Trajectory(avg_x, avg_y, avg_a)); }
return smoothed_trajectory; }


我們?cè)谥骱瘮?shù)中使用它

// Smooth trajectory using moving average filter  vector <Trajectory> smoothed_trajectory = smooth(trajectory, SMOOTHING_RADIUS);


步驟4.3:計(jì)算平滑變換
到目前為止,我們已經(jīng)得到了一個(gè)平滑的軌跡。在這一步,我們將使用平滑的軌跡來(lái)獲得平滑的變換,可以應(yīng)用到視頻的幀來(lái)穩(wěn)定它。

這是通過(guò)找到平滑軌跡和原始軌跡之間的差異,并將這些差異加回到原始的變換中來(lái)完成的。

Python

# Calculate difference in smoothed_trajectory and trajectorydifference = smoothed_trajectory - trajectory # Calculate newer transformation arraytransforms_smooth = transforms + difference

C++

vector <TransformParam> transforms_smooth;for(size_t i=0; i < transforms.size(); i++){// Calculate difference in smoothed_trajectory and trajectorydouble diff_x = smoothed_trajectory[i].x - trajectory[i].x;double diff_y = smoothed_trajectory[i].y - trajectory[i].y;double diff_a = smoothed_trajectory[i].a - trajectory[i].a;// Calculate newer transformation arraydouble dx = transforms[i].dx + diff_x;double dy = transforms[i].dy + diff_y;double da = transforms[i].da + diff_a;transforms_smooth.push_back(TransformParam(dx, dy, da));}
第五步:將平滑的攝像機(jī)運(yùn)動(dòng)應(yīng)用到幀中

差不多做完了?,F(xiàn)在我們所需要做的就是循環(huán)幀并應(yīng)用我們剛剛計(jì)算的變換。

如果我們有一個(gè)指定為(x, y, \theta),的運(yùn)動(dòng),對(duì)應(yīng)的變換矩陣是

請(qǐng)閱讀代碼中的注釋以進(jìn)行后續(xù)操作。

Python

# Reset stream to first frame cap.set(cv2.CAP_PROP_POS_FRAMES, 0)  # Write n_frames-1 transformed framesfor i in range(n_frames-2):  # Read next frame  success, frame = cap.read()   if not success:    break
# Extract transformations from the new transformation array dx = transforms_smooth[i,0] dy = transforms_smooth[i,1] da = transforms_smooth[i,2]
# Reconstruct transformation matrix accordingly to new values m = np.zeros((2,3), np.float32) m[0,0] = np.cos(da) m[0,1] = -np.sin(da) m[1,0] = np.sin(da) m[1,1] = np.cos(da) m[0,2] = dx m[1,2] = dy
# Apply affine wrapping to the given frame frame_stabilized = cv2.warpAffine(frame, m, (w,h))
# Fix border artifacts frame_stabilized = fixBorder(frame_stabilized)
# Write the frame to the file frame_out = cv2.hconcat([frame, frame_stabilized])
# If the image is too big, resize it. if(frame_out.shape[1] &gt; 1920): frame_out = cv2.resize(frame_out, (frame_out.shape[1]/2, frame_out.shape[0]/2)); cv2.imshow("Before and After", frame_out) cv2.waitKey(10) out.write(frame_out)


C++

cap.set(CV_CAP_PROP_POS_FRAMES, 1);Mat T(2,3,CV_64F);Mat frame, frame_stabilized, frame_out; 

for( int i = 0; i &lt; n_frames-1; i++) { bool success = cap.read(frame); if(!success) break; // Extract transform from translation and rotation angle. transforms_smooth[i].getTransform(T); // Apply affine wrapping to the given frame warpAffine(frame, frame_stabilized, T, frame.size()); // Scale image to remove black border artifact fixBorder(frame_stabilized); // Now draw the original and stabilised side by side for coolness hconcat(frame, frame_stabilized, frame_out); // If the image is too big, resize it. if(frame_out.cols &gt; 1920) { resize(frame_out, frame_out, Size(frame_out.cols/2, frame_out.rows/2)); }
imshow("Before and After", frame_out); out.write(frame_out); waitKey(10);}


步驟5.1:修復(fù)邊界偽影
當(dāng)我們穩(wěn)定一個(gè)視頻,我們可能會(huì)看到一些黑色的邊界偽影。這是意料之中的,因?yàn)闉榱朔€(wěn)定視頻,幀可能不得不縮小大小。

我們可以通過(guò)將視頻的中心縮小一小部分(例如4%)來(lái)緩解這個(gè)問(wèn)題。

下面的fixBorder函數(shù)顯示了實(shí)現(xiàn)。我們使用getRotationMatrix2D,因?yàn)樗诓灰苿?dòng)圖像中心的情況下縮放和旋轉(zhuǎn)圖像。我們所需要做的就是調(diào)用這個(gè)函數(shù)時(shí),旋轉(zhuǎn)為0,縮放為1.04(也就是提升4%)。

Python

def fixBorder(frame):  s = frame.shape  # Scale the image 4% without moving the center  T = cv2.getRotationMatrix2D((s[1]/2, s[0]/2), 0, 1.04)  frame = cv2.warpAffine(frame, T, (s[1], s[0]))  return frame


C++

void fixBorder(Mat &frame_stabilized){Mat T = getRotationvoid fixBorder(Mat &amp;frame_stabilized){  Mat T = getRotationMatrix2D(Point2f(frame_stabilized.cols/2, frame_stabilized.rows/2), 0, 1.04);   warpAffine(frame_stabilized, frame_stabilized, T, frame_stabilized.size()); }Matrix2D(Point2f(frame_stabilized.cols/2, frame_stabilized.rows/2), 0, 1.04);warpAffine(frame_stabilized, frame_stabilized, T, frame_stabilized.size());}

結(jié)果:

我們分享的視頻防抖代碼的結(jié)果如上所示。我們的目標(biāo)是顯著減少運(yùn)動(dòng),但不是完全消除它。

我們留給讀者去思考如何修改代碼來(lái)完全消除幀之間的移動(dòng)。如果你試圖消除所有的相機(jī)運(yùn)動(dòng),會(huì)有什么副作用?

目前的方法只適用于固定長(zhǎng)度的視頻,而不適用于實(shí)時(shí)feed。我們不得不對(duì)這個(gè)方法進(jìn)行大量修改,以獲得實(shí)時(shí)視頻輸出,這超出了本文的范圍,但這是可以實(shí)現(xiàn)的,更多的信息可以在這里找到。

https://abhitronix.github.io/2018/11/30/humanoid-AEAM-3/

優(yōu)點(diǎn)和缺點(diǎn)

優(yōu)點(diǎn)

這種方法對(duì)低頻運(yùn)動(dòng)(較慢的振動(dòng))具有良好的穩(wěn)定性。這種方法內(nèi)存消耗低,因此非常適合嵌入式設(shè)備(如樹(shù)莓派)。這種方法對(duì)視頻縮放抖動(dòng)有很好的效果。

缺點(diǎn)

這種方法對(duì)高頻擾動(dòng)的抵抗效果很差。如果有一個(gè)嚴(yán)重的運(yùn)動(dòng)模糊,特征跟蹤將失敗,結(jié)果將不是最佳的。這種方法也不適用于滾動(dòng)快門(mén)失真。

References:

  1. Example video and Code reference from Nghia Ho’s post

    http://nghiaho.com/uploads/code/videostab.cpp

  2. Various References, data, and image from my website

    https://abhitronix.github.io/

  3. https://www.learnopencv.com/video-stabilization-using-point-feature-matching-in-opencv/


下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
在「小白學(xué)視覺(jué)」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺(jué)、目標(biāo)跟蹤、生物視覺(jué)、超分辨率處理等二十多章內(nèi)容。

下載2:Python視覺(jué)實(shí)戰(zhàn)項(xiàng)目52講
小白學(xué)視覺(jué)公眾號(hào)后臺(tái)回復(fù):Python視覺(jué)實(shí)戰(zhàn)項(xiàng)目,即可下載包括圖像分割、口罩檢測(cè)、車道線檢測(cè)、車輛計(jì)數(shù)、添加眼線、車牌識(shí)別、字符識(shí)別、情緒檢測(cè)、文本內(nèi)容提取、面部識(shí)別等31個(gè)視覺(jué)實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺(jué)。

下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講
小白學(xué)視覺(jué)公眾號(hào)后臺(tái)回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講,即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

交流群


歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺(jué)、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺(jué)SLAM“。請(qǐng)按照格式備注,否則不予通過(guò)。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~


瀏覽 58
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 日本少妇无码| 日韩无码网站| 亚洲欧美成人网| 偷拍视频第一页| 免费在线无码视频| 欧美午夜乱伦电影| 在线天堂视频| 亚洲AV无码成人| 99自拍网| 操逼爆奶网站| 亚洲熟女一区二区三区妖精 | 一级AV| 大荫蒂hd大荫蒂视频| 制服丝袜在线视频| 蜜臀久久99精品久久久久久宅男 | 国产在线观看mv免费全集电视剧大全| 麻豆天美传媒AV果冻传媒| 欧美日韩91| 亚洲美女一区| 国产成人大香蕉| 香蕉在线播放| 大香蕉伊人影视| 亚洲日韩一区| 色哟哟av| 国产真实乱婬A片三区高清蜜臀| 草草浮力院| 欧美韩日一区二区| 国产一级a毛一级a做免费的视频| 亚洲中文字幕av| 欧美性精品| 久久久久久久网站| 水蜜桃网站在线观看| 先锋影音AV资源站| 成人无码日本动漫电影| 操极品美女| 久久人体| 国产精品欧美7777777| 精品视频无码| 三级黄色视频在线观看| 久久五月亭亭| 日本一区二区三区视频在线观看| 婷婷开心色四房播播免费| AV资源在线| 午夜福利毛片| 国产资源在线观看| 北条麻妃在线一区| 国产人妖TS重口系列网站观看| 国精品无码人妻一区二区三区| 五月天AV网站| 成人肏逼视频在线| 777av| 99热网站| 日本人人操| 伊人影院在线视频| 亚洲AV性爱| 3D动漫精品啪啪一区二区竹笋| 最新亚洲无码在线观看| 国产高清精品在线| 手机AV网站| 日韩无码不卡| 久久丝袜| 色婷婷一区二区| 色婷婷日韩精品一区二区三区| 想要xx在线观看| 色欲大香蕉| 男人午夜网站| 亚洲四房播| 九九色色| 精品国产乱码久久久久夜深人妻| 久久久久久精品国产三级| 爱搞视频在线观看| 日韩A视频| 黄色91| 亚洲精品成a人在线观看| 欧美日韩国产成人在线| 中文字幕黄色片| 国产免费内射| 91三级片在线观看| 欧美大黄视频| 人人操人人上| 怡红院成人在线| 影音先锋女人资源| 久久久女女女女999久久| 日本人妻中出| 成人大战香蕉最新视频| 亚洲欧美综合| 操逼免费看| 蜜柚AV| 欧美77777| 99re热| 亚洲在线视频播放| 韩国无码一区二区三区| 久久久久99精品成人网站| 99久久99九九九99九他书对| 五月婷婷激情综合| 亚洲精品久久久久久久久豆丁网 | 超碰人人操人人| 人人干人人操人人摸| 人人摸人人色| 欧美色色色色色| 亚洲无码不卡视频| 成人精品水蜜桃| 尤物视频官网| www四虎com| 精品视频无码| 欧美高清视频| 色香蕉在线| 中文字幕在线网址| 色婷婷在线免费视频| 美女黄色免费网站| 欧美一级特黄A片免费| 亚洲性爱一区二区| 国产无套内射在线观看| 欧美色视频在线观看| 欧美成人免费电影| 精品成人A片久久久久久不卡三区 免费看成人A片无码照片88hⅤ | 国产又粗又猛又黄又爽无遮挡| 青青草大香蕉在线| 国产AV美女| 性欧美丰满熟妇XXXX性久久久 | 男人天堂99| 成人免费区一区二区三区| 六月婷婷深爱| 亚洲v欧美v| 亚洲午夜精品久久久久久APP| 日韩vA| 免费av毛片| 成人午夜小电影| 大鸡巴操B视频| 欧美一级性爱在线观看| 一本色道久久综合亚洲怎么玩| 午夜性爱网址| 吃奶做爱视频| 午夜偷拍视频| 亚洲无码AV一区二区| 熟女人妻在线| 亚洲视频欧美| 黄片天堂| 69国产精品成人无码| 大香蕉精品视频| 极品另类| 欧美激情五月| 成人黄色在线观看| 火淫玖玖免费精品| 永久免费不卡在线观看黄网站| 99久久久国产精品免费蜜臀| 天天日综合网| 蜜桃影院| 日韩在线观看网址| 狠狠色五月亚洲91| 怡春院AV| 日韩欧美二区| 亚洲国产精品久久久| 国产精品久久久精品| 亚洲高清无码在线| 免费看黄片网站| 一本色道88久久加勒比精品| 精品九九九九九九| 骚BBBB槡BBB槡BBB| 免费播放黄色成人片| 91麻花| 青青在线免费视频| jk在线观看| 成人视频免费| 在线观看污视频| av无码在线观看| 久久久久久久| 黄色大片中国一级片-免费看特一级片-亚洲黄色AV | 欧美婷婷综合| 香蕉三级片| 中文字幕国产视频| 日本在线观看| 国产在线| 三级高清无码视频| 99无码精品| 中文字幕在线免费观看电影| 97国产高清| 啪啪视频最新地址发布页| 午夜AV无码| 黄色片在线| 欧美色图视频网站| 作爱免费视频| 日本无码视频在线| 天天天天天天天干| 操逼在线看| h片在线观看免费| 日韩电影中文字幕| 鲁一鲁视频| 男人天堂网AV| 91三级片在线观看| 国产黄色视频网站在线观看 | 天天插天天插| 中国熟女网站| 色狠狠AV| 欧美视频区| 大香蕉网在线| 久操视频免费| 亚洲综合中文| 羽月希在线播放| 92自拍视频| 黑人乱伦| 极品一线天小嫩嫩真紧| 91天天射| 丁香五月网| 国产欧美一区二区三区国产幕精品 | 三洞齐开Av在线免费观看| 麻豆三级精品| 一级黄片免费视频| 大香蕉大香蕉视频网| 秋霞福利网| 青青草精品| 新亚洲天堂男子Av-| 国产免费黄色视频网站| 熟女熟妇人妻一区二区三区| 黄色视频网站在线观看| 91亚洲国产成人| 台湾色综合| 性爱视频久久| 丰满人妻精品一区二区在线| 日产久久视频| 亚洲AV无码成人网站国产网站 | 亚洲乱淫| A片久久久| 爱搞视频| 国产黄色视频在线观看免费| 欧美福利| 亚洲色无码人妻激情| 精品人妻无码一区二区三区| 69国产精品无码免费| 免费看黄A级毛片成人片| 日本一区二区在线| 亚洲va在线∨a天堂va欧美va| 欧美黄片在线免费看| 人人超碰在线| 人人摸人人色| 免费一级黄色电影| 黄频在线免费观看| 亚洲成人不卡| 国产日韩视频| 性爱无码视频| 狠狠操夜夜操| 日韩激情一区| 影音AV| 美女三片| 黄色视频在线观看| 精品无码三级在线观看视频| 特黄AV| 亚洲s在线| 天天日日日干| 三级国产AV| 水蜜桃一曲二区| 久久久亚洲AV无码精品色午夜| 国内自拍欧美| 麻豆传媒电影| 日韩日逼视频| 国产99999| 午夜激情久久| 日批网站在线观看| 68久久久| 九七在线视频| 无码人妻精品一区二区蜜桃91| 最近中文字幕免费mv第一季歌词強上 | 国产毛片777777| 黑人Av| 欧美欧美欧美| 日韩一区二区三区无码电影| 婷婷91| 一级片在线播放| 大鸡巴久久久久| 熟女综合网| 黄片免费观看视频| 996热久久| 日本黄色直播| 天天干天天日天天| 韩国午夜激情| 久久福利视频导航| 视频一区二区三区免费| 日日干干| 免费看黄色的网站| 亚洲中文免费视频| 国产美女被操| 蜜臀无码在线| 青春草在线观看国产| 内射在线播放| 欧一美一婬一伦一区?| 依人综合网| 91人妻人人澡人人爽| 西西www444无码大胆| 91成人小视频| 九九成人视频| 德国肥妇熟妇BBwBBw| 国产美女在线播放| 黄片AAA| 精品国产成人| 欧美成人自拍视频| 欧美精品久久久久久| 国产精品无码成人AV电影| 久久婷五月天| 九九偷拍视频| 国产91嫩草乱婬A片2蜜臀| 做爰视频毛片下载蜜桃视频。 | 豆花成人在线| 久久婷婷五月综合伊人| 国产91无码精品秘入口新欢| 国产欧美日韩综合精品| 91热久久| 高清无码黄片| 福利视频在线| 视频一区二区三区免费| 囯产精品久久久久久久久久久久久久 | 一道本无码在线观看| 強姦婬片A片AAA毛片Mⅴ| 免费A级| 久草福利网| AV色站| 熟女中文字幕| 久久精品无码一区二区无码性色| 国产成人无码一区二区在线播放 | av电影在线观看| 美女在线扣穴| 日本色婷婷| 大香蕉伊人在线视频| 日韩一本道在线| 操逼视频在线看| 国产午夜精品视频| 91av免费在线观看| 欧美黄色片| 一区二区三区在线视频观看| 91久久久久久久| 亚洲v欧美v| 成人精品一区二区三区中文字幕| 一区二区三区国产| 久久嫩草| 国精品91无码一区二区三区在线 | 高清无码在线观看18| 女人一区二区| 在线免费观看无码| 亚洲乱码国产乱码精品天美传媒| 国产一级a毛一级a毛视频在线网站)| 欧美精品久久久久久久久老牛影院 | 国产精品黄色视频| 蜜臀AV一区二区三区免费看| 久久这里只有精品9| 婷婷久久久| 国产又粗又大又长| 啪啪网站免费| 黄片WWW| 成人免看一级a一片A片| 欧美东京热视频| 一起草在线视频| 韩日一级17c| AV偷拍| 无码精品视频| 在线播放高清无码| 第一福利视频导航| 国产免费啪啪视频| 91免费国产视频| 色九月婷婷| 99热热久久| 蜜桃视频网站在线观看| 安徽妇搡BBBB搡BBBB袄爱直播| 日韩A片免费| 老司机一区二区三区| 操逼视频免费看| 色婷婷久久久久swag精品| 亚洲国产成人AV| 俺来也俺去也| 乱伦激情视频| 国产粉嫩在线观看| 日韩精品久久| 久草高清视频| 国产激情无码视频| 国产色婷婷精品综合在线播放 | 爽好紧别夹喷水无码| 大鸡巴久久久久久| 日日撸夜夜撸| 日本婷婷| 大香蕉网址| 囯产一级a一级a免费视频| 国产成人在线播放| 少妇探花| AV毛片| 91成人视频在线免费观看| 人人操人人| 欧美性爱手机在线| 中文字幕午夜福利| 中国免费一级无码成人片| 影音先锋av色| 综合中文字幕| 肉色超薄丝袜脚交一区二区 | 福利视频免费观看| 欧美成人a片| 一区免费在线观看| 日本黄色视频免费观看| 欧美熟妇高潮流白浆| 苍井空一区| 猛男大粗猛爽H男人味| 黄色片在线播放| 1区2区视频| 在线一区| 中文子幕免费毛片| 亚洲成人大香蕉视频| 无套内射学生妹去看片| 特级特黄A级高潮播放| 女人AV天堂| 日韩无码A级片| 日韩中文字幕电影| 黄色AV免费观看| 五月久久婷婷| 91伊人在线| 开心激情网站| 超碰天天操| 日韩小电影在线观看| 91网址| 超碰av电影| 日韩无码一级片| 亚洲国产另类无码| 乱伦视频网| 三级片无码麻豆视频| 蜜桃av秘一区二区三区| 99久久99九九九99九他书对| 99热黄色| 久久99久久99久久99国内少妇精品| 91亚洲国产成人久久精品网站 | AV无码不卡| 狠狠躁夜夜躁人爽| 91免费观看网站| 大鸡巴在线视频| 97大香蕉在线视频| 国产在线欧美在线| 国产AV三级| 日韩欧美a片| 翔田千里珍藏版无码| 日韩在线观看中文字幕| 懂色av粉嫩AV蜜臀AV| 日韩欧美v| 国产福利免费视频| 黄片免费观看视频| 亚洲伊人成人| 撸撸操在线视频观看只有精品| 丁香五月大香蕉| 在线观看不卡av| 精品无码一区二区三| 欧美成人大片| 黄色大片中国一级片-免费看特一级片-亚洲黄色AV | AAA免费视频| 青青草小视频| 免费岛国av大片| 国产精品乱子伦视频一区二区 | 操屄在线观看| 翔田千里被操120分钟| av网站免费看| 午夜精品一区二区三区在线成人| 先锋影音在线资源| 国产无遮挡又黄又爽又色| 激情无码五月天| 欧美精品一二三| 青青草原在线视频免费观看 | 国产SUV精品一区二区| 日本色色网| 欧美日韩精品一区二区三区视频播放 | 婷婷五月花| 人人爽久久涩噜噜噜网站| 怕怕怕视频| 水蜜桃一曲二区| 亚洲.无码.制服.日韩.中文字幕 | 艹逼视频| 日韩经典视频在线播放| 亚洲V国产v欧美v久久久久久| 亚洲午夜激情| 丁香五月在线| 国产日韩欧美一区二区| 日韩无码视频播放| 色久综合| 新妺妺窝窝777777野外| 日韩V片| 97色综合| 91jiujiu| 午夜尤物| 亚洲AV无码一区二区三竹菊| 99热免费观看| 俺去啦俺去啦| 天天天天毛片| 久久无码一区二区三区| 蜜臀久久99精品久久久久久婷婷| 成人黄色性视频| 亚洲中文AV| 福利视频一区二区三区| 中文字幕精品一区久久久久| 国产熟妇婬乱一区二区| 国产麻豆性爱视频| 一卡二卡三卡无码| 操逼视频免费| 大鸡巴操骚逼视频| 国产激情视频网站| 欧美成人电影| 国产a√| 欧美性爱一级| 精品无码9| 驲韩在线视频免费观看| 无码AV大香线蕉伊人| 99爱免费视频| 3D动漫精选啪啪一期二期三期| 国精产品一区二区三区黑人和中国 | 青青国产在线| 亚洲精品白浆高清久久久久久 | 久热青草| 久艹av| 国产性交网站| 黄色网在线| 毛片久久久| 妹子色综合| 国产无码av| 欧美第一区| 91久久电影| 免费视频一二区| 色一区二区| 成人做爰100部免费网站| 国内精品久久久久久久久久| 444444免费高清在线观看电视剧的注意 | 亚洲高清在线| 麻豆国产一区二区三区四区| 成人毛片18女人毛片真水| 国产一二三区在线| 国产欧美一区二区精品性色超碰| www.777av| 婷婷午夜精品久久久久久性色| 囯产伦精一区二区三区四区| 丁香六月婷婷综合| 国产性爱在线视频| 中文字幕黄色| 3D精品啪啪一区二区三区| 操逼视频在线观看| 亚洲无aV在线中文字幕| 国产无遮挡又黄又爽又色| 黄色综合网站| 成人福利影视| 精品人妻一区二区三区浪潮在线| 黄页免费视频| 韩国成人精品三级| 欧美精品欧美精品系列| 69av在线| 翔田千里AV在线| 自拍偷拍精品视频| 中文字幕精品一级A片| 在线观看视频日韩| 伊人网综合| 91人妻人人澡人人| www.18av| 内射一区二区三区| 欧美视频在线免费| 国产免费A片| 亚洲AV成人精品日韩在线播放| 操逼逼网站| 国产又爽又黄视频| 免费av一区二区| 18禁免费网站| 亚洲午夜成人| 91抽插| 翔田千里中文字幕无码| 人妻体体内射精一区二区| 国产av高清| 国产精品久久视频| 国产亚洲日韩在线| 大香蕉免费在线| 久久无码人妻精品一区二区三区| 欧美日韩一区二区三区在线电影| 国产成人在线播放| 狠狠干大香蕉| 九色PORN视频成人蝌蚪自拍 | 欧美在线成人视频| 无码人妻一区二区三区在线视频不卡 | 91无码在线观看| 91网站免费| 亚洲成人视频在线免费观看| 午夜精品久久久久久久91蜜桃| 西西www444无码大胆| 在线观看无码| 中文字幕第五页| 日韩av毛片| 久久嫩草国产成人一区| 青娱乐精品在线视频| 男女免费av| 亚洲91黄色片| 精品久久国产| 国产成人无码一区二区在线| 99精品视频免费看| 国产无遮挡又黄又爽又色| 日本黄色A片免费看| 国产黄色片免费| 国家一级A片| 国产一区二区三区在线| 嫩草亚洲小泬久久夂| 熟妇人妻中文AV无码| 老婆被黑人杂交呻吟视频| 在线观看日韩视频| 欧美一级生活片| 日韩无码高清网站| 成人av小说网站| 四虎av| 在线无码AV| 天堂在线中文字幕| 欧美日韩中文| 五月天久久久久| 激情小说在线视频| 欧美精品在线免费观看| 麻豆视频在线看| 久久香蕉综合在线| 高清无码黄片| 超碰成人在线观看| 久久久久亚洲AV成人网人人软件 | 在线高清无码不卡| 最新国产激情视频| 91在线看| 亚洲日韩视频在线观看| AV无码免费观看| 国产成人视频免费观看| 欧美日韩高清一区二区三区| 91porn在线观看| 亚洲欧美日韩中文字幕在线观看| 国产午夜福利免费视频在线观看 | 99久久人妻无码中文字幕系列| 大香蕉在线99| 久久久久久亚洲精品| 天堂在线社区| 日韩不卡在线| 日韩无码国产精品| 99在线视频免费观看| 亚洲自拍电影| 91日日夜夜| 国产无码中文| 一区二区在线看| 激情综合网站| 69久久久久| 乱伦激情视频| 人人干超碰| 四虎最新地址| 中文字幕在线播放av| 在线观看成人三级片| 特一级黄色电影| 无套进入无套内谢| 成人做爱免费网站| 一区无码| 熟女无码| 婷婷五月天中文字幕| 久色伊人| 白浆av| 日韩人妻无码中文字幕| 高清无码在线不卡| 淫色淫香综合网| 欧美一级棒| 少妇激情av| 北条麻妃JUX-869无码播放| 久久看片| 日韩一区二区三区无码电影| 亚洲无码中文视频| 美女av网站| 久久国产精品电影| 简单av网| 在线三级av| 先锋影音男人资源站| 日本一区二区视频在线观看| 色情片在线播放| 青青草国产在线视频| 香蕉av在线| 韩日午夜| 国产一级黄色A片| 成人亚洲天堂| 无码一级A片| 国精产品一区二区三区在线观看| 日韩丰满人妻| 在线看黄网| AV资源网站在线| 五月丁香婷婷激情综合| 欧一美一婬一伦一区二区三区自慰国| 久久yy| 亚洲无码久久网| 欧美大屌网站| 精品在线播放视频| 97超碰中文字幕| 先锋久久| 国产美女在线播放| 亚洲码无人客一区二区三区| 91三级在线观看| 亚洲一区三区| 亚洲日本高清| 亚洲日韩激情| 三级三级久久三级久久18| 婷婷在线观看视频| 日韩一级a片| 国产精品视频久久| 欧美一级a| 人妻精品一二三| 天天爽夜夜爽精品成人免费| 黄色大片中国一级片-免费看特一级片-亚洲黄色AV | 人人操人人看人人| 日韩A毛片| 午夜福利视频3000| 中文字幕在线中文| 欧美国产三级| 少妇白洁在线观看| 操B网址| 狠狠狠狠操| 精品无码人妻| 日韩一级黄片| 日韩成人无| 岛国av无码免费| 大香蕉色婷婷| 亚洲免费小电影| 午夜性福利视频| 国产精品内射视频| 蜜臀网在线| 91www| 国产在线观看一区二区| 国产电影一区二区三区| 操逼视频在线| 国产P片内射天涯海角| 国产日皮| 人人操人人网站| 动漫无码视频| 婷婷毛片| www.婷婷六月天| 国产灬性灬淫灬欲水灬| 国产va在线观看| 天天干天天添| 亚洲高清在线| 黄色视频日韩| 精品操逼视频| 国产午夜精品一区二区三区嫩A | 国产91精品看黄网站在线观看| 精品国产乱码久久久久久郑州公司| 国产一区二区av| 免费高清无码| 特猛特黄AAAAAA片| 日本一级婬片A片免费播放一 | 中文字幕免费高清网站| 婷婷在线综合| 亚洲国产一区二区三区| 人人干人人摸| 插菊花综合网亚洲| 国产主播一区二区| 国语操逼| 久久久久久婷婷| 在线免费观看一区| 夜夜操夜夜爽| 丝袜人妻被操视频| 蜜芽人妻在线| 99久久久精品久久久久久| 91瑟瑟| 91AV无码| 99久久久久久久| 国产免费一区二区在线A片视频| 欧美国产日韩欧美亚洲国产| 国产三级片视频在线观看| 欧美日韩北条麻妃视频在线观看| 中文字幕黄色| 综合色婷婷一区二区亚洲欧美国产| 日老女人逼| 搡BBBB搡BBB搡Bb| 亚洲永久在线| 国产亚洲欧美日韩高清| 翔田千里无码AV在线观看| 成人电影久久久| 99热国产免费| 91人人妻| 欧美成人aaa| 欧美XX888做受| 国产精品美女久久久久AV爽| 囯产精品久久久久久久久久辛辛| 婷婷五月香| 狠狠久久| 日韩成人AV在线播放| 亚洲高清视频在线播放| 亚洲中文字幕视频在线| 亚洲色一区二区| av女人天堂| 天堂亚洲精品| 黄色视频大全在线观看| 7799综合| 色天堂网站| 国产黄色视频在线| 日韩一区欧美| 亚洲伊人影院| 性无码一区二区三区在线观看 | 草草久久久无码国产专区的优势| 黄色三级在线观看| 久久亚洲福利视频| 欧美草比视频| 美女扣穴| 日本丰满老熟妇乱子伦| 黃色一级一片免费播放| 天天操天天干麻豆| 国产在线观看你懂的| AV黄色片| 无码精品一区二区| 伊人网站| 国产噜噜噜噜噜久久久久久久久 | 婷婷色在线视频| 91人妻成人精品一区二区| a片视频免费观看| 少妇BBB| 久久免费视频1| 色哟哟av| 无码专区在线看v| 91成人一区二区| 日皮视频在线免费观看| 中文字幕在线观| 免费观看黄色视频| 夜夜天天人人| 成人毛片18女人毛片真水| 婷婷色在线视频| 伊人成人在线视频| 人妻丰满熟妇| 又黄又爽的视频| 欧美日韩成人视频| 亚洲中文视频| 久久久久久久久久久久成人| www免费视频在线观看播放| 亚洲免费黄色电影| 亚洲无码影视| 国产精品无| 免费成人黄色| 翔田千里一区二区| 欧美亚洲色色网视频| 成人网站大香蕉| 午夜男人天堂| 黄色在线免费观看| 黄色电影毛片| 国产性猛交╳XXX乱大交| 国产亚洲一区二区三区| 免费亚洲视频| 精品吃奶一区二区三区视频| 国产高清无码在线观看视频| 亚洲天堂视频在线| 天天躁狠狠躁夜躁2024| 丁香五月在线播放| 翔田千里無碼破解| 国产成人视频在线观看| 欧美日韩一级在线观看| 久久婷婷在线| 51毛片| 爆乳一区二区三区AV| 天天日天天操天天爽| 亚洲日本黄色视频| 欧美大香蕉视频| 亚洲成人视频在线播放| 亚洲综合在线观看视频| 99这里只有精品视频| 俺来俺去www色婷婷| japanese在线观看| 亚洲综合视频在线| 91视频在线观看网| 青青草原免费在线视频| 亚洲精品无码中文字幕| 日无码| 亚洲三级视频在线播出| 天天干国产| 日本三级视频| 91视频免费在线看| 高清无码视频18| 无码黑人| 精品久久三级片| 亚洲欧美在线免费观看| 夜夜骚av一区二区三区| 成人久操| 潮喷在线观看| 亚洲AV成人无码精在线| 国产成人午夜福利视频| 亚洲AV无码精品久久一区二区| 在线观看高清无码视频| 777偷窥盗摄00000| 精品乱子伦一区二区三区在线播放 | 国产日韩欧美91| 2025天天操| 国产欧美综合视频一区二区在线| 婷婷网五月天| AV免费在线播放| 中文字幕在线看成人电影| 亚洲免费黄色片| 久久免费视频观看| 成人婷婷五月| 九草在线| 午夜福利片| 日韩69| 特级婬片A片AAA毛片AA做头| 国产无码专区| 天天日天天草天天干| 无码一区二| 亚洲性爱AV网站| 国产精品天天狠天天看| 国产在线不卡| 超碰最新在线观看| 在线a| 久青草视频| 嫩BBB搡BBBB搡BBBB-百度| 中文字幕不卡在线| 日韩午夜欧美精品一二三区| 一级黄色录像视频| 青青草原AV| 九九成人免费视频|