免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

基于WPF和OpenCvSharp4的多邊形ROI標注工具開發(fā)實踐

基于WPF和OpenCvSharp4的多邊形ROI標注工具開發(fā)實踐 1. 為什么需要自研多邊形ROI一個標注場景的痛點拆解1.1 來源項目中的真實需求幾個月前接了一個圖像初檢工具的活兒核心場景很簡單一批高分辨率的零件圖上真正需要算法關(guān)注的區(qū)域往往只占整張圖的一小部分而且形狀不規(guī)則。矩形ROI能框出大概范圍但會把很多背景也圈進來后續(xù)做灰度統(tǒng)計或者邊緣檢測時噪聲特別大。對方提的需求很直接在界面里用鼠標手動圈出一個多邊形區(qū)域把這個區(qū)域單獨摳出來剩下的部分不影響后續(xù)處理。說白了就是圖像處理里常說的感興趣區(qū)域提取只不過這次交互層要自己做。接手之前我想得比較簡單WPF里放一個Canvas圖片顯示上去鼠標點幾下線一連頂點坐標傳給OpenCvSharp4去摳圖完事。真做起來才發(fā)現(xiàn)整個鏈路里最麻煩的并不是OpenCV那邊而是坐標系換算、鼠標狀態(tài)管理、閉合判定這些UI細節(jié)。這篇博文就完整記錄一下整個實現(xiàn)過程包括踩過的坑。適合正在做WPF圖像標注、ROI選取工具或者準備把OpenCV接入.NET桌面應用的讀者。1.2 為什么不用現(xiàn)成全屏截圖工具動手之前我先確認了一遍市面上有沒有現(xiàn)成的控件能直接干活。試過一些截圖標注工具它們確實內(nèi)置了矩形、橢圓甚至多邊形選區(qū)但問題是這些工具要么把截圖當成最終輸出要么保存的是圖片文件而不是坐標數(shù)據(jù)。我們這個場景需要的是把多邊形頂點坐標實時回傳給算法層后續(xù)還要基于這套ROI坐標做批量處理現(xiàn)成工具根本無法滿足這種坐標即資產(chǎn)的需求。另一個原因是版本迭代。工具后續(xù)要支持多種標注類型、ROI列表管理和坐標持久化自研雖然前期成本高一點但數(shù)據(jù)結(jié)構(gòu)完全可控功能擴展不受制于人。這個決策在后來的開發(fā)中證明是對的因為客戶果然在驗收前提了一堆追加需求如果當時用了現(xiàn)成品改起來要麻煩得多。2. 技術(shù)選型復盤Canvas、OpenCvSharp4搭配的取舍2.1 為什么UI層鎖定WPF和Canvas技術(shù)選型時第一爭議是WinForms和WPF選哪個。WinForms上手快GDI畫多邊形也簡單但考慮到后續(xù)要做圖層疊加、頂點拖拽、縮放平移這些交互我更傾向于WPF。WPF的Canvas是一個極其靈活的面板子元素可以通過Left和Top屬性進行絕對定位天然適合標記點的坐標管理。而且WPF的圖形元素Line、Polygon、Ellipse都支持矢量渲染縮放不模糊用來做交互標注體驗遠好于WinForms。Canvas這個控件本身不復雜但它為核心交互提供了良好的基礎每個頂點是一個Ellipse每條邊是一條Line我只需要維護一個頂點集合然后根據(jù)集合內(nèi)容動態(tài)增刪Canvas的子元素即可。相比手動Paint重繪整個界面操作粒度細、代碼結(jié)構(gòu)清晰也不容易出現(xiàn)閃爍。2.2 OpenCvSharp4相比其他封裝方案的優(yōu)勢圖像處理側(cè)起初有幾個備選直接調(diào)用C OpenCV的CLI封裝、Emgu CV、OpenCvSharp。我最終選了OpenCvSharp4理由是它幾乎純C#托管API風格和OpenCV官方非常接近文檔全社區(qū)案例也多。而且它同時支持.Net Framework和.Net Core/6/7配WPF沒有歷史包袱。Emgu CV也用過但它的某些API命名和類型轉(zhuǎn)換不如OpenCvSharp4直觀調(diào)試時心智負擔更重。OpenCvSharp4的NuGet包會把OpenCV運行時一并帶上安裝完直接能用不需要手動配置環(huán)境變量這對交付工具類的項目來說省了不少事。版本號建議直接上OpenCvSharp4當前較新的小版本記得同時安裝對應平臺的運行時包比如OpenCvSharp4.runtime.win。2.3 技術(shù)棧邊界劃分整個架構(gòu)的邊界一開始就要劃清楚UI層只負責人機交互不碰像素數(shù)據(jù)算法層只接收坐標數(shù)據(jù)不關(guān)心界面長什么樣。我設計了一個中間數(shù)據(jù)模型保存每一個ROI的頂點列表歸一化坐標、名稱、創(chuàng)建時間。UI層把Canvas坐標換算成圖像像素坐標后寫入模型算法層在真正執(zhí)行提取時才從模型讀取坐標傳給OpenCvSharp4。這個解耦在后來的測試中幫了大忙坐標問題可以單獨驗證圖像處理問題也可以單獨排查不會互相干擾。3. 第一步實戰(zhàn)WPF項目搭建與圖像顯示坐標建模3.1 創(chuàng)建項目與引用OpenCvSharp4環(huán)境用的是Visual Studio 2022 (.NET 6)新建WPF應用程序項目后NuGet安裝兩個包Install-Package OpenCvSharp4 Install-Package OpenCvSharp4.runtime.win安裝完成后在代碼里引入命名空間using OpenCvSharp;一個容易忽略的坑OpenCvSharp4依賴的VC運行庫版本可能和本機不同部署到客戶機器上如果報錯缺少runtime要么裝對應運行庫要么考慮自包含發(fā)布。我后來直接把VC運行庫打進了安裝包里省去了現(xiàn)場排查的麻煩。3.2 XAML布局與Canvas容器設計窗口布局用Grid分兩塊左側(cè)是原圖顯示區(qū)右側(cè)是ROI列表和操作按鈕。顯示區(qū)放一個ScrollViewer里面套一個Canvas圖片用Image控件鋪在Canvas底部。這里有一點很關(guān)鍵Image的width和height要顯式設置不要只依賴Stretch屬性否則后面做坐標換算時拿到的實際顯示尺寸會不穩(wěn)定。Grid Grid.ColumnDefinitions ColumnDefinition Width*/ ColumnDefinition Width320/ /Grid.ColumnDefinitions Border Grid.Column0 BorderBrush#ccc BorderThickness1 ScrollViewer x:NameImageScrollViewer HorizontalScrollBarVisibilityAuto VerticalScrollBarVisibilityAuto Background#222 Canvas x:NameDrawCanvas Width800 Height600 BackgroundTransparent VerticalAlignmentTop HorizontalAlignmentLeft Image x:NameMainImage StretchNone Width800 Height600 RenderOptions.BitmapScalingModeHighQuality/ /Canvas /ScrollViewer /Border StackPanel Grid.Column1 Margin10 Button x:NameOpenImageButton Content1. 打開圖片 Margin0,0,0,8/ Button x:NameStartDrawButton Content2. 開始標注多邊形 Margin0,0,0,8/ Button x:NameExtractButton Content3. 提取當前ROI Margin0,0,0,8/ Button x:NameClearButton Content4. 清空頂點 Margin0,0,0,8/ ListBox x:NameRoiListBox Margin0,12,0,0 Height360/ /StackPanel /Grid注意Image初始沒有設Source加載圖片后再實際設置。Canvas的寬度高度初始值跟隨圖片尺寸同步更新。3.3 坐標體系轉(zhuǎn)換Canvas坐標與圖像原始像素的映射真正的核心邏輯在這里。Canvas上顯示的圖片尺寸不一定是原始圖像尺寸所以鼠標在Canvas上的坐標并不等于圖像里的像素坐標。兩者之間需要一個比例系數(shù)轉(zhuǎn)換。加載圖片后我記錄兩個值作為基準_originalWidth原始圖片的像素寬度_originalHeight原始圖片的像素高度同時把Canvas和Image的寬高都設置為原始像素寬高這里先不考慮縮放后面縮放版本再討論。換算公式很直接public class CoordinateTransform { public static Point CanvasToImage(Point canvasPoint, Size originalSize, Size displaySize) { double scaleX originalSize.Width / displaySize.Width; double scaleY originalSize.Height / displaySize.Height; return new Point(canvasPoint.X * scaleX, canvasPoint.Y * scaleY); } }這個轉(zhuǎn)換類的單元測試我寫了很多組覆蓋圖片寬高一致、按比例縮小、非整數(shù)縮放等情況。坐標換算是整個項目的命脈這一步錯了后面所有提取結(jié)果都會歪。測試用例里有一條非常經(jīng)典Canvas上一個點1530原始圖是800×600顯示尺寸是400×300期望換算結(jié)果是3060這個用例能擋住很大一部分越寫越偏的代碼。3.4 加載圖片并綁定顯示加載圖片時使用System.Windows.Media.Imaging的BitmapImage注意要把CacheOption設為OnLoad否則文件句柄一直占著不放。代碼如下private void LoadImage(string filePath) { var bitmap new BitmapImage(); bitmap.BeginInit(); bitmap.CacheOption BitmapCacheOption.OnLoad; bitmap.UriSource new Uri(filePath); bitmap.EndInit(); _originalWidth bitmap.PixelWidth; _originalHeight bitmap.PixelHeight; MainImage.Source bitmap; MainImage.Width _originalWidth; MainImage.Height _originalHeight; DrawCanvas.Width _originalWidth; DrawCanvas.Height _originalHeight; _vertices.Clear(); Redraw(); }我特意把Canvas和Image設成相同的尺寸目的就是讓Canvas坐標系和圖片顯示坐標系完全重合。不重合的做法也能做但每次都要減偏移量交互代碼會埋很多隱患。4. 多邊形標注交互設計點、線、閉合與拖拽調(diào)整4.1 頂點數(shù)據(jù)模型與繪制狀態(tài)機標注交互本質(zhì)上是個狀態(tài)機空閑態(tài)、繪制中、已閉合。我用一個枚舉管理當前狀態(tài)同時維護一個頂點集合public enum DrawState { Idle, Drawing, Finished } private DrawState _state DrawState.Idle; private ObservableCollectionPoint _vertices new ObservableCollectionPoint(); private ListEllipse _vertexEllipseList new ListEllipse(); private ListLine _edgeLineList new ListLine();繪制中狀態(tài)表示已經(jīng)點了至少一個頂點但還沒閉合。已閉合后禁止繼續(xù)加點用戶必須點擊開始標注重新建一個ROI或者選中某個ROI編輯頂點。4.2 鼠標事件的綁定與頂點添加邏輯鼠標操作都掛在DrawCanvas上用MouseLeftButtonDown處理加點用MouseMove處理預覽線用MouseRightButtonDown做撤銷邏輯集中、清晰。private void DrawCanvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { if (_state DrawState.Finished) return; var pos e.GetPosition(DrawCanvas); _vertices.Add(pos); if (_vertices.Count 1) { _state DrawState.Drawing; } else { // 檢查是否點擊到起點附近觸發(fā)閉合 double firstDist Distance(_vertices[0], pos); if (firstDist 12 _vertices.Count 3) { // 用第一個點替換最新點保證閉合平滑 _vertices[_vertices.Count - 1] _vertices[0]; _state DrawState.Finished; } } Redraw(); }閉合判定用的是距離閾值法初版用12像素。很多人會寫成雙擊閉合或者按下S閉合實際用下來還是點回起點附近最符合直覺因為雙擊和右鍵經(jīng)常誤觸發(fā)。閾值不能太大否則如果起點附近恰好有密集點會誤閉合也不能太小否則用戶要很精確點回起點。12在1920×1080屏幕上體驗不錯。右鍵撤銷邏輯經(jīng)常被忽略但它非常重要。用戶手滑點多了一個頂點如果只能清空重來極其影響體驗。實現(xiàn)很便宜private void DrawCanvas_MouseRightButtonDown(object sender, MouseButtonEventArgs e) { if (_state DrawState.Drawing _vertices.Count 1) { _vertices.RemoveAt(_vertices.Count - 1); if (_vertices.Count 1) _state DrawState.Finished; Redraw(); } }4.3 動態(tài)繪制頂點圓點和網(wǎng)格線如何同步刷新Redraw方法負責把頂點集合渲染到Canvas上。實現(xiàn)思路是每次全量清空繪制層子元素再重新生成數(shù)據(jù)量不大一個多邊形幾十個點時性能毫無壓力。private void Redraw() { for (int i _edgeLineList.Count - 1; i 0; i--) DrawCanvas.Children.Remove(_edgeLineList[i]); for (int i _vertexEllipseList.Count - 1; i 0; i--) DrawCanvas.Children.Remove(_vertexEllipseList[i]); _edgeLineList.Clear(); _vertexEllipseList.Clear(); if (_vertices.Count 1) return; for (int i 0; i _vertices.Count; i) { var ellipse new Ellipse { Width 10, Height 10, Fill Brushes.Yellow, Stroke Brushes.Black, StrokeThickness 2 }; Canvas.SetLeft(ellipse, _vertices[i].X - 5); Canvas.SetTop(ellipse, _vertices[i].Y - 5); DrawCanvas.Children.Add(ellipse); _vertexEllipseList.Add(ellipse); if (i 0) { var line new Line { X1 _vertices[i - 1].X, Y1 _vertices[i - 1].Y, X2 _vertices[i].X, Y2 _vertices[i].Y, Stroke Brushes.OrangeRed, StrokeThickness 2 }; DrawCanvas.Children.Add(line); _edgeLineList.Add(line); } } if (_state DrawState.Finished _vertices.Count 3) { var closeLine new Line { X1 _vertices[_vertices.Count - 1].X, Y1 _vertices[_vertices.Count - 1].Y, X2 _vertices[0].X, Y2 _vertices[0].Y, Stroke Brushes.OrangeRed, StrokeThickness 2 }; DrawCanvas.Children.Add(closeLine); _edgeLineList.Add(closeLine); } }一個性能細節(jié)不要用DrawCanvas.Children.Clear()因為Image也在Children里會被一并清掉。我只維護自己的兩個列表只清自己的Image不受影響。這里提到的預覽線鼠標移動時的橡皮筋線沒有包含在上面代碼里我在MouseMove里額外畫了一條臨時Line追蹤當前鼠標位置方便用戶看到下一條邊會變成什么形狀。private Line _tempLine; private void DrawCanvas_MouseMove(object sender, MouseEventArgs e) { if (_state ! DrawState.Drawing || _vertices.Count 0) return; var pos e.GetPosition(DrawCanvas); if (_tempLine null) { _tempLine new Line { Stroke Brushes.Orange, StrokeThickness 1.5, StrokeDashArray new DoubleCollection { 4, 4 } }; DrawCanvas.Children.Add(_tempLine); } _tempLine.X1 _vertices[_vertices.Count - 1].X; _tempLine.Y1 _vertices[_vertices.Count - 1].Y; _tempLine.X2 pos.X; _tempLine.Y2 pos.Y; }閉合后應移除_tempLine避免它殘留成臟數(shù)據(jù)。這類清理細節(jié)雖然小但漏了就會在界面上畫幽靈線。4.4 讓標注可用性提升的拖拽調(diào)點功能只是能加點連線還不算好用真正實用必須支持拖拽調(diào)整已有點的位置。方法是MouseLeftButtonDown時先做命中檢測命中優(yōu)先于新增頂點。命中邏輯用一個簡單距離函數(shù)private int HitTestVertex(Point pos) { double minDist 12; int hitIndex -1; for (int i 0; i _vertices.Count; i) { double d Distance(_vertices[i], pos); if (d minDist) { minDist d; hitIndex i; } } return hitIndex; }如果返回的索引不是-1進入拖拽模式并在MouseMove里更新該頂點坐標然后Redraw。加了一個IsDragging標志防止拖拽時重復判定。拖拽過程中也要更新之后的點記錄否則新計算ROI時會拿到過期坐標。這個功能初版沒做測試直接上真機出現(xiàn)了拖動過程中頂點漂移的嚴重問題——原因在于MouseMove用e.GetPosition(DrawCanvas)拿到的是相對Canvas的坐標可拖拽的點坐標本身也在Canvas坐標系兩者單位一致不該有偏差。排查后發(fā)現(xiàn)是Image的Stretch被設成了Uniform圖片實際顯示尺寸跟Canvas尺寸不一致導致坐標錯位。最終把Stretch改成了None讓圖片嚴格按像素尺寸鋪在Canvas上問題立刻消失。5. 核心一步用OpenCvSharp4完成ROI提取與保存5.1 ROI頂點如何從UI坐標轉(zhuǎn)換為圖像像素坐標當用戶完成一個多邊形后頂點集存儲的還是Canvas上的顯示坐標。由于我在加載圖片時已經(jīng)讓Canvas尺寸等于圖片原始像素尺寸這一步坐標轉(zhuǎn)換退化為恒等變換。不過為了代碼健壯性和后續(xù)擴展縮放功能還是統(tǒng)一調(diào)用CoordinateTransform轉(zhuǎn)了一遍確保未來加入圖片縮放后不用改這段邏輯。ListOpenCvSharp.Point roiPoints new ListOpenCvSharp.Point(); foreach (var v in _vertices) { var imgPoint CoordinateTransform.CanvasToImage(v, new Size(_originalWidth, _originalHeight), new Size(MainImage.ActualWidth, MainImage.ActualHeight)); roiPoints.Add(new OpenCvSharp.Point((int)Math.Round(imgPoint.X), (int)Math.Round(imgPoint.Y))); }特別注意像素坐標必須取整否則OpenCV的Point不接受浮點。取整時優(yōu)先用Math.Round而不是強轉(zhuǎn)int直接強轉(zhuǎn)是截斷誤差圖像邊緣容易偏一個像素在提取掩碼做邊界判斷時會有肉眼可見的鋸齒偏移。5.2 用FillPoly生成掩碼并執(zhí)行BitwiseAnd提取所有坐標準備完畢后提取分三步創(chuàng)建與原圖同尺寸的掩碼矩陣、在掩碼上填充多邊形區(qū)域為白色、用掩碼做按位與操作。private Mat ExtractRoi(Mat src, ListOpenCvSharp.Point roiPoints) { Mat mask new Mat(src.Size(), MatType.CV_8UC1, Scalar.All(0)); OpenCvSharp.Point[] vertices roiPoints.ToArray(); Cv2.FillPoly(mask, new OpenCvSharp.Point[][] { vertices }, new Scalar(255)); Mat result new Mat(); Cv2.BitwiseAnd(src, src, result, mask); return result; }為什么用FillPoly因為它能處理凹多邊形。Cv2.FillConvexPoly只能處理凸多邊形名字里就帶Convex凹多邊形用它會出現(xiàn)錯誤填充。而用戶在圖上隨手圈出的區(qū)域大多不是嚴格的凸多邊形所以必須用支持任意多邊形的FillPoly。另一個值得提醒的細節(jié)如果只是想象本文最開始需求那樣把ROI區(qū)域提取出來BitwiseAnd即可結(jié)果保留了原圖色彩如果還要把ROI之外的區(qū)域統(tǒng)一變?yōu)榧兩珓t在獲得mask后執(zhí)行Mat bg new Mat(); Cv2.BitwiseNot(mask, bg); Mat background new Mat(src.Size(), src.Type(), new Scalar(0, 0, 0)); src.CopyTo(background, bg);5.3 提取結(jié)果另存為圖片并刷新到界面提取完成后把Mat轉(zhuǎn)成WPF可顯示的BitmapSource預覽展示在界面右側(cè)同時提供保存按鈕。Mat轉(zhuǎn)BitmapSource的代碼在網(wǎng)上一搜一大把注意釋放中間資源避免內(nèi)存堆積。private BitmapSource MatToBitmapSource(Mat mat) { if (mat null || mat.Empty()) return null; int channels mat.Channels(); PixelFormat format channels 1 ? PixelFormats.Gray8 : PixelFormats.Bgr24; byte[] buffer new byte[mat.Width * mat.Height * channels]; System.Runtime.InteropServices.Marshal.Copy(mat.Data, buffer, 0, buffer.Length); BitmapSource bitmap BitmapSource.Create( mat.Width, mat.Height, 96, 96, format, null, buffer, mat.Width * channels); return bitmap; }保存時用Cv2.ImWrite直接寫文件即可如果保存的只是提取ROI膠片含透明區(qū)域外包矩形建議先裁剪到ROI的外接矩形Cv2.BoundingRect否則保存成圖片后整張圖還是原來的矩形尺寸周圍大片黑色看不出摳的效果。Rect boundingRect Cv2.BoundingRect(vertices); Mat cropped new Mat(result, boundingRect); Cv2.ImWrite(roi_output.jpg, cropped);裁剪之后既能減小文件體積也方便后續(xù)算法只關(guān)注ROI小圖不用每次處理整張原圖。6. 實測踩坑坐標漂移、DPI縮放與Mat內(nèi)存管理6.1 坑一DPI縮放導致標注點偏移半條街第一版在開發(fā)機上一切正常拿到高DPI筆記本電腦上跑多邊形標注位置整體偏移點得越遠偏差越大。排查后確認是WPF默認按DPI虛擬化在高DPI顯示器上元素實際渲染尺寸和邏輯像素尺寸不一致。解決方式是在App啟動時顯式聲明DPI感知[System.Runtime.InteropServices.DllImport(user32.dll)] static extern bool SetProcessDPIAware(); protected override void OnStartup(StartupEventArgs e) { SetProcessDPIAware(); base.OnStartup(e); }更規(guī)范的現(xiàn)代方式是添加app.manifest設置PerMonitorV2 DPI感知。使用SetProcessDPIAware簡單直接在絕大多數(shù)場景下夠用。這一改之后坐標繪制和鼠標點擊對齊了問題消失。6.2 坑二Mat對象不釋放導致內(nèi)存翻倍OpenCvSharp4的Mat在托管層看似是普通類底層卻持有非托管內(nèi)存。初版代碼頻繁打開新圖片、構(gòu)建掩碼、提取結(jié)果內(nèi)存占用不斷攀升。OpenCV自己的規(guī)則是誰分配誰負責釋放但在C#環(huán)境下很多人容易忘記Dispose。解決辦法所有臨時Mat都用using語句包住或者手動調(diào)用Dispose。尤其注意FillPoly創(chuàng)建的mask、BitwiseAnd得到的result都不能裸奔。重構(gòu)后的提取方法長這樣private Mat ExtractRoiWithMemorySafe(Mat src, ListOpenCvSharp.Point roiPoints) { using (Mat mask new Mat(src.Size(), MatType.CV_8UC1, Scalar.All(0))) { OpenCvSharp.Point[] vertices roiPoints.ToArray(); Cv2.FillPoly(mask, new OpenCvSharp.Point[][] { vertices }, new Scalar(255)); Mat result new Mat(); Cv2.BitwiseAnd(src, src, result, mask); return result; } }mask在using塊結(jié)束自動釋放result作為方法返回值由調(diào)用方負責釋放。寫代碼時形成這個習慣后長時間反復開圖測試內(nèi)存穩(wěn)定在初始水平附近沒有再漲。6.3 坑三預覽線與真實繪圖元素互相覆蓋、殘留開發(fā)初期MouseMove里的臨時預覽線直接Add到Canvas結(jié)果閉合后忘移除界面上出現(xiàn)一條跟隨鼠標跑的虛線非常尷尬。后來統(tǒng)一封裝了一個_dynamicLayer所有臨時性元素預覽線、拖拽提示都放這個專用Canvas層里每次鼠標狀態(tài)切換時先清空該層。代碼更整潔也不會誤刪主繪制層的內(nèi)容。還有一個相關(guān)的小坑EdgeLine列表在Redraw時如果遺漏某條線界面上會出現(xiàn)舊線殘留問題。后來我總結(jié)出規(guī)律只要維護了專門的List 刪除和添加必須保證同一清單不要一部分靠List記錄、一部分靠Children索引兩個來源一旦不同步就是疑難雜癥。6.4 坑四多ROI管理時坐標記錄不同步項目后來演進到支持保存多個多邊形ROI每個ROI除了頂點坐標外還要記錄名稱、置信度等附加信息。一開始我把頂點直接放ObservableCollection 但發(fā)現(xiàn)修改一個ROI會影響另一個——原因是列表里存的是同一個Point對象的引用。調(diào)試半天才意識到Point是結(jié)構(gòu)體不是類本不該有此問題真正的原因是我在代碼某處把ROI對象淺拷貝了。最終改為深拷貝列表再沒有出現(xiàn)相互污染。這提醒我涉及引用類型的ROI列表深拷貝不是可選項是必要項。序列化成JSON時也要謹慎配置ReferenceLoopHandling避免多邊形對象自引用導致死循環(huán)。7. 從單一ROI到量產(chǎn)工具坐標持久化與批量處理思路7.1 坐標數(shù)據(jù)如何持久化標注工具的價值一半在于標注數(shù)據(jù)的積累。多邊形ROI提取完成后坐標信息必須能保存和重新加載否則每次打開工具都要重新圈一遍體驗極差。我將ROI數(shù)據(jù)序列化為JSON格式保存成與圖片同路徑的sidecar文件。public class RoiRecord { public string Name { get; set; } public Listdouble[] Polygon { get; set; } public double Confidence { get; set; } public DateTime CreateTime { get; set; } }每個頂點存成[x, y]的double數(shù)組讀取時再轉(zhuǎn)成Point這樣做的好處是JSON結(jié)構(gòu)簡單且不依賴UI層的Point類型任何語言都能解析后續(xù)接入Python訓練Pipeline毫無障礙。7.2 批量提取的并行化實現(xiàn)當同類圖片幾十上百張時一張一張手動圈顯然不行。好在ROI坐標通常是預設的模板坐標來自一張標準圖批量提取就是把這些坐標按比例映射到每張待測圖上然后用同一個掩碼流程執(zhí)行提取。OpenCvSharp4支持并行處理我用的Parallel.For對文件列表做并行提取。這里踩過一個線程安全坑OpenCV的Mat操作在不同線程間是安全的但Cv2.ImWrite的保存路徑如果并發(fā)寫同一文件會沖突。解決方式是為每張圖生成唯一文件名圖片名加ROI名徹底避免并發(fā)寫。Parallel.For(0, fileList.Count, i { using (Mat src Cv2.ImRead(fileList[i], ImreadModes.Color)) { if (src.Empty()) return; using (Mat roi ExtractRoi(src, mappedPoints)) { Rect rect Cv2.BoundingRect(mappedPoints); using (Mat cropped new Mat(roi, rect)) { Cv2.ImWrite(Path.Combine(outDir, ${Path.GetFileNameWithoutExtension(fileList[i])}_roi.jpg), cropped); } } } });7.3 后續(xù)擴展方向完成了多邊形ROI提取之后這個工具已經(jīng)不僅僅是個摳圖工具了。ROI坐標可以喂給模板匹配可以統(tǒng)計區(qū)域灰度均值和方差可以接入OCR識別特定區(qū)域的文字也可以作為缺陷檢測的排除范圍。我還做了一步很實用的擴展支持在ROI提取結(jié)果上疊加網(wǎng)格統(tǒng)計按行和列把區(qū)域切分輸出各小格的數(shù)值方便做區(qū)域差異分析。這些擴展都建立在坐標數(shù)據(jù)和圖像處理鏈路解耦的基礎上只要初始的多邊形標注交互穩(wěn)定可靠上層怎么玩都很順手。從我這個項目的經(jīng)驗來說先把標注這層地基打牢比急著堆功能重要得多。最后分享一個實操小技巧如果你的多邊形頂點特別多繪制時建議每加一個點就先移除再重繪整個Canvas而是對新增點只做一次增量繪制尾部補一條新邊。否則上百個頂點的多邊形每次微調(diào)都會卡一下用戶體驗天差地別。我的處理是在Redraw之外加了一個AppendVertex方法專門處理增量場景性能開銷從毫秒級降到微秒級涂抹體驗完全不一樣。這塊瓶頸雖然不復雜但做了之后流暢度提升非常明顯。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
99热精品在线| 婷婷丁香www视频日本韩国| 亚洲十月婷婷综合| 天天玩夜夜操天天爽| 极骚大香蕉伊人| 激情AV在线| 五月激情婷婷六月丁香| 亚洲另类在线观看| 操操国产| 偷拍91九色| 思思9久久| 婷婷99视频精品| 狠狠久久婷五月综合色| 高潮毛片遮挡费高一百度| 久久影视婷婷五月| 激情婷婷丁香色五月| www色色com| 亚洲 视频 导航 一区| 五月婷婷六月爱| 综合久久五月天| 丁香婷婷综合色五月激情国产基地| 九九这里只有精品| 丁香五月综合| 人人草人人舔| 狠狠爱综合网| 丁香六月婷| 激情综合99| 激情五月亚洲| 99re最新地址| 婷婷丁香激情综合色情| 天天摸人人摸| 五月天婷婷在线AN| 超级碰碰91| 亚洲色 视频| 亚洲日本激情| 无码一区二区日韩| 久久久婷丁香五月| 麻豆WWWCOM内射软件| 99热只有| 九月丁香亭亭| 天天插天天爽| 香蕉久久国产AV一区二区| 五月天啪啪视频| 丁香 亚洲 久久| 婷婷天天色| 久久这里只有精品1| 免费观看的AV| www.婷婷.com| 色综合区| 青草视频在线观看视频| 香蕉曰比| 亚洲AV第二区国产精品| 婷婷久久久| 人人爱国产| 婷婷五月天激情五月天| 九九热精品视频| 无码色色色| 亚洲天天| 91婷婷在线| 人妻九九九九| 久久久国产精品黄毛片| 91伦| 色综合区| 襙比视频| 99热1| 综合伊人久久| 99热亚洲| 小泽玛利亚视频一区二区| 超碰丁香五月| 欧美激情五月综合| 婷婷五月情天| 久热免费视频| 狠狠色综合久久久久| 亚州第一黄网| 婷婷五月成人色综合| 亚洲中文无码成人| 开心激情综合| 99热| 超级碰碰碰碰视频| 激情婷婷五月天伊人在线观看| 五月综合777| WWW.色婷婷.COM| 五月六月伦理| 在线观看国产高清视频免费网站 | 夜夜做夜夜愛| 午夜丁香婷婷| 久热AⅤ| 婷婷丁香激情综合色情| 色区域网站视频| 婷婷综合在线| 女人被躁到高潮嗷嗷叫小| 日本色超碰| 丁香六月激情四射| 五月激情婷婷丁香| 人妻内射一区二区在线视频| www.久久久久久久| 日本va欧美va欧美va| 一区二区乱码视频| 97久久精品视频| 色欲九区| 人人干av| 久久99大| 亚洲AAA| 狠狠操狠狠| 五月天社区| 亚洲视频在线网| 六月激情婷婷| 五月婷婷亚洲色视频| 99无码视频| 色五月激情图片| www超碰| 日日操天天| 久久婷婷五月| 人人操人人爱丁香五月| 久久小说| 夜夜天天久久婷婷| 日本99视频| 久久婷婷丁香五月宗合| 激情六月综合| 超碰成人在线免费观看| 五月色精品| 婷婷五月丁香基地| 日本久久网| 99热这里只有精彩| 五月丁香婷婷99| 激情久久天天| 国产婷婷婷| 五月婷丁香花| 色色色网站| 久久少妇视频| 大香蕉懂9| 国产精品色一哟哟| 五月丁香综合色婷婷| 热99这里只是精品| 久久这里只精品| 性生活视频98791| 色区域网站视频| 婷婷色五月激情| 色久九| 婷婷久久精品| 超碰99久久| 人人干av| 亚洲操精品| 人人干人人操人人摸| 日韩精品一区二区三区,四区,五区视频| 五月婷婷综合激情网| 九九热这里只有精品6| 九九精品9| 就爱干 在线| 久久九色| 狠狠五月天婷婷激情网。| 亚洲乱码日产精品BD| 色综合久| 色五月天综合| 久久五月天激情| 五月丁香少妇A| 另类视频五月天| 九九人人操| 色婷婷欧美| 日韩在线视频网站| 亚洲人妻av| 精品视频99看在线视频| 九九婷婷五月天| 人人人人人人人草| 久久色五月| 欧美天堂久久| 五月丁香 久久久| 丁香婷婷综合激情五月色| 久久久婷| 激情五月天色婷婷综合| 4438激情网| 亚洲第一成人无码A片| 五月婷婷av| 99精品视频网| 色五月在线视频观看| www.色情五月天.com| 婷婷五月天天天| 97精品自拍| 东京热免费视频| 久久久久久天天日天天爱| 国产精产国品一二三在观看| 亚洲va欧美va天堂v国产综合| 九热久| 久久精彩免费视频| 永久精品| 亚洲丁香五月深爱五月| 秋霞日本免费毛片A片| 五月丁香精品| 婷婷五月丁香六月天亚洲综合| 偷偷操九九| 久久综合首页| 天天干天天爽天天操| 在线成人视频免费| 婷婷五月天综合亚洲| 五月丁香偷拍| 五月天婷婷综合网| 丁香婷婷五月综合| 亚洲精品五月| 激情五月婷婷免费视频| 中文字幕av亚洲| 噜噜在线| 久操福利| 久久金品黃色| 五月丁香六月合| 婷婷色在线视频| 免费黄色片子| 99久久99久久| 99这里只有精品视频| 99re热精品在线视频| 成人久碰| 精品久久久中文字幕大豆网推荐理由| 丁香五月婷婷影院| 99九九在线观看免费| 五月婷婷丁香五月婷婷| 五月情丁香色| 丁香五月性| Www.se.久久| 99热在线精品观看| 久操热线| 综合性爱网| 噼里啪啦在线观看免费完整版视频 | 夜夜操夜夜爽| 九九色中文| 久久99激情五月天| 色五月亚洲| 五月激情站| 五月婷婷深深爱| 日逼免费视频 | 日韩综合网络男女香蕉a片| 亚洲成人电影在线免费观看| 无码少妇高潮喷水A片免费| WWW.桔色成人.COM| 99热精品无码| 婷婷婷婷婷婷婷婷| 欧洲激情精品婷婷| 五月婷婷五月丁香| 婷香五月激情视频| 五月天综合视频网| 色插综合网| 欧美熟妇一区二区三区| 日婷婷| 婷婷另类开心| 成人AV在线网站| 免费国产VA国产免费| 亚洲一区国产传媒| 综合久| 丁香五月综合激情性爱 | 色婷婷综合在线| 狠狠精品干练久久久无码中文字幕| 国产激情久久久| 91成人看片| 另类视频五月天| 激情小说五月欧美亚洲丁香| 色色色色网| 亚洲色优| 五月婷婷激情综合| JAPANRCEP老熟妇乱子伦视频| 另类视频五月天| 99久久9| www,久久久| 97人人操| 婷婷色综合| 中文字幕按摩做爰| WWW.五月com| 日日操夜夜操不卡| 亚洲顶级VA在线观看-高清完整版在线影院观看-S022AV | 免费亚洲婷婷| 26uuu亚洲色| 婷婷激情肏屄网| 四月婷婷五月色综合| 人妻中文在线| 九九草热在线观看| 婷婷涩涩五月天| 99热国产免费| www.婷婷五月天.com| 婷婷狠狠操| 91精品久久久久久77777| 超碰av在线| 精品一二三区久久AAA片| 99热这里有精品| av亚洲国产小电影| 久久九九囯产| 婷婷色在线| 影音先锋女人av鲁色资源网小说免费| 热99re| 色综合色综合色综合| 五月婷婷六月少妇激情| 久久婷婷五月天| 久热这里| 性热视频99精品| 99久久久| 丁香五月天激情视频| 97婷婷丁香| 色综合久久久久| 色九四色| 网站免费一站二站| 风流少妇A片一区二区蜜桃 | 五月天色色婷婷| 99这里都是精品| 婷婷丁香91综合| 啪啪色区| 开心五月激情五月丁香五月婷婷| 日本啪啪网| 无码日本精品XXXXXXXXX | 99精品网址| 人妻狠狠操| 五月丁香激情六月| 色色五月丁香| 久久东京热婷婷五月| www.五月婷婷久久.com| 四色永久成人网站| 深爱五月最新网址| 五月丁香婷婷综合| 婷婷五月丁香六月| 91午夜激情| 狠狠色色| 色噜噜综合网| 97五月久久丁香婷婷| 日日做A爰片久久毛片A片英语| 五月天丁香啪啪啪啪| 天天天久久久| 久久性爱视频| 五月婷婷|欧美| 艾小青av| www久久久久久久久久久| 久久九九@| 99人人操人人摸| 色屌丝中文字幕| 日本三日本三级少妇三级66| 亚洲精品又粗又大又爽A片| 琪琪色热色色| 亚洲激情另类| 婷婷伊人视婷婷婷| 开心激情网五月| 中文字幕无码人妻少妇免费视频| 99久久66| 日本片日本片祼观看网站在线看中文版网页在线看 | 欧洲一区二区| 日韩欧美老妇性视频91久久久| 伊人婷婷五月| 色视频色综合91| 开心五月六月婷婷| 久久九九国产精品怡红院| 91久久电影| 精品,99| 午夜天堂一区人妻| 五月天色五月天| 狠狠操狠狠操AV| 91人操| 婷婷性福五月天| 亚洲成人在线电影网站| 婷婷五月丁香基| 七七九九色色| 成人国产欧美大片一区| www,色中色| 国产精品久久久久久久久久久久| 五月丁香av在线| 99熟女| 日本的α片xxxwww| 免费无码毛片一区二区A片| 激情综合青草| 亚洲精品又粗又大又爽A片| 婷香五月网在线| 99热免费观看| 六月丁香婷啪射| 亚洲精品久久久久久久久久吃药| 天天射综合网夜夜操| 婷婷五月天 丁香五月天 裸体| 五月婷婷六月爱| 国产无套精品一区二区| 免费观看日韩成人av| 能看的av片| 国产婷伊人| 中文不卡一二区| jiujiuxiangjiaowang| 性天天中文网| 五月天操逼网| 熟女人妻一区二区三区免费看| 色色色99韩| 日日躁夜夜躁狠狠久久AV| 99热这里只有精品69| 97一区二区| 亚洲色婷婷视频| OUMEIRIHANCHENGREN| 亚洲人成色A777777在线观看| 久久久久8888| 午夜天堂一区人妻| 婷婷综合网| 色噜噜狠狠色综合成人网| 婷婷六月色| 亚洲欧洲色色| 深爱激情丁香五月| 大香蕉九九| 丁香五月激情综合| 五月婷婷丁香五月 | 狠狠色噜噜狠狠| 日本精品99| 综合在线丁香五月| 久草性爱| 欧美三级视频| 91久久久久久久久18| 五月丁香色婷婷熟女| 18久久| 激情综合久久| 天天久| 噜噜色天天开心| 人妻无码视频网| 亚洲视频色婷婷| 成人在线日韩| 九九99在线视频| 99热99色| 91成人视频| 思思热在线精品视频网站| 久久五月情| 丁香五月自拍| 九九热10| 婷香五月激情视频| 婷婷九月丁香久久| 99热 在线观看| 五月亭亭欧美女人| 在线综合亚洲欧美65| 久久五月激情| 99干在线| 果冻传媒A片一二三区| 久热9| 噜噜五月天综合| 99热思思在线观看| 色色日韩网| 色情五月| 日本英国美国欧美亚洲国产精亚洲日韩精品在线观看 | 狠狠香蕉| 色欲影香| 激情婷婷九月| 丁香五夜激情四射夜夜夜| 色噜噜狠狠一区二区三区| 婷婷五月丁香香蕉| 五月婷婷激情四月| 狠狠色 综合色区| 密黄站| 99九九玖玖| 五月婷婷之综合激情在线| 大香蕉啪啪啪| 五月婷精品| 开心激情五月天网| 色导航色婷婷五月天在线观看| 日日干综合| 婷婷色在线| 91成人电影| 丁香青青五月天| 久久色大香蕉| 99久操视频| 99免费超碰在线| 激情婷婷| 无人区码一码二码三码医生系列| 五月天激情国产综合婷婷婷| 大香蕉九九| 丁香九月激情| 色综合色色| 色婷婷综合网| 国产亚洲色婷婷久久99精品91| 91无码视频| 99啪啪网| 91精品91久久久中77777| 九九色播五月丁香| 丝袜人妻| 色五月婷婷五月天| 蜜桃人妻无码AV天堂三区| 色99色| 久热这里只有精品6| 大香蕉99热| 人妻激情视频| 超碰久热| 另类小说五月天激情| 亚洲女婷婷五月基地综合久久久| 色播丁香婷婷五月激情| 九九热在线观看视频| 狠狠干无码| 思思热在线视频精品| 丁香五月AV| 大香蕉伊人99| 亚洲视频在线观看| 人人操超碰| 色色色色色色五月婷婷| 婷婷色情网| 超碰三级秋霞| 狠狠插日日干撸| 天天日天天干天天操| 日本色99网站| 人人97操| 久久天堂网| 97人人操人人| 亚洲中文字幕在线观看| 婷五月天| 九九热这里只有精品7| 五月丁香婷婷无码A∨| 五月天激情Av| 激情五月天综合网| 国产亚洲精品AAAAAAA片 | www天天色天天射| 婷婷伊人网| 色色热| 久9热在线免费观看| 成人AV中文字幕| 日日噜人人人做人| 丁香五月区| 婷色五月天| 强壮公让我夜夜高潮A片视频| 五月四色激情| 婷婷色色五月天| 男女久久婷婷五月天| 天天插天天干| 日本少妇裸体做爰高潮片| 国产女人十八水真多1| 亚洲1区| 激情五月丁香六月婷婷| 五月综合无码| 九月丁香八月婷婷久久综合久97| WWW、日本色丁香co m| 99热这里只有精品免费观看| 五月丁香婷婷综合| 91尤物九色在线| 人妻久久久久久久久妻久久久久| 婷婷97碰碰| 26uuu国产精品| 婷婷成人五月天| 中文字幕丰满孑伦无码专区| 9999三级片| 影音先锋人妻出差| 91久久久久久| 综合久久久| 五月综合婷婷久久在线| 五月丁香五月综合欧美| 97人操人免费视频| 夜夜夜夜撸夜夜操| 新激情五月天| 狠狠干总合| 天天插天天插天天操| 国产午夜一区二区三区| 久久婷婷丁香花综合网| 激情五月天啪啪视频| 婷婷久久五月天丁香| 激情综合视频| 深爱五月亚洲| 最近免费中文字幕大全高清大全1| 丁香激情久久| 亚洲啪啪网| 艹色18p| 亚洲十月婷婷综合| 综合天堂AV久久久久久久| 日本一级一级一级一级| 九九热黄色| 五月天婷综合| 五月天婷婷乱论小说| 亚洲岛国电影| 狠狠插日日干撸| 丁香五月激动深爱欧美| 五月丁香婷婷激情在线| 免费视频WWW在线观看网站| 91chinese在线| 91色五月| 九九99免费视频| 手机旧版看人妻1025| 婷婷六月综合激情| 丁香五月 激情文学| 久久久久思思热| 欧美色激情四射| 丁香六月爱综合| 日本色色影片| 色婷婷狠狠干芒果TV| 99久久超级| 99热这里只有的精品视| 婷婷五月天大香蕉在线视频观看| 五月亭亭性| 婷婷丁香五月激情密臀av| 久久精品性爱| 日本三级日本三级三级人妇四虎| AV性爱在线| 国产噜一噜天天噜| 免费无码毛片一区二区A片| 久久这里只有精品视频26| 亚洲狠狠丁香婷婷香蕉| 久久婷婷成人综合色怡春院| 91日日日| 丁香五月天激情综合| 99视频久久免费视频| 五月丁香网中文字幕| 日本欧美成人片AAAA| 丁香五月婷婷乱| 精品九九久久| 色播六月| 亚洲色小说在线综合| 久久五月婷天天干| 五月天偷拍| 99热最新| 欧美色片中文字幕久久久久| 五月婷在线观看| 久久与婷婷| 五月丁香综合啪啪| 五月丁香六月婷婷综合网缴情| 久久一级免费黄色片| 免费婷婷| 亚洲婷婷丁香五月视频| 97干在线观看| 少妇大叫太大太粗太爽了A片| 激情综合亚洲色婷婷五月| 国产精品成人网站| 五月天激情婷婷| 色婷婷五月天综合网| 婷婷色吧| 91紱請| 激情图片婷婷丁香五月| 狠狠 婷婷| 97久久超级| 五月丁香六月激情在线| 日日夜夜天天综合| 蜜桃婷婷五月| 97精品自拍视频| 亚洲亚洲人成综合网络| 婷婷丁香六月| 天堂婷婷丁香六月网| 色婷婷啪啪啪啪啪啪| 亚洲精品字幕在线观看| 天天舔天天摸| 五月丁香婷中文| 99热在线中文字幕| 久草 tingting| 日本高清久久| 噜噜狠狠色| 密乳视频| 噜一噜免费视频| 99热精品网| 久久精品A片777777| 五月综合丁香婷婷| 国产精品五月天婷婷| 丁香五月激情天AV无码| A在线观看| 日本wwww在线| 日本人妻伦在线中文字幕 | 色婷婷欧美| 精品九九婷婷| 丁香色婷婷色手机免费在线| 99热这里是精品| 九九无码| 这里只有精品无码| av人人操| 久久深爱激情网| 操笔无码| 777色婷婷爱五月| 九月激情综合| 色综合香蕉| 人人操婷婷| 日产精品一线二线三线芒果| 久久色情| AV电影在线播放| 久热99热| 一区二区乱码视频| 九九99热| 婷婷欧美激情综合| 激情中文在线| 欧美性猛交99久久久99| 狠狠综合区| 免费超碰在线观看| 亚洲婷婷性爱| 亚洲在线免费成人| 热99视频精品在线| 日本44久久在线| 色色色香蕉五月婷| 精品日本视频444| 琪琪布丁香社区激情五月天| 九七色色六月丁香| ..真实国产乱子伦毛片| 狠狠插.com| 午夜伊人大香蕉| 色色婷婷综合| 激情综合九| 微拍92| 91精品国产色猫| 婷婷色基地在线看| www.9797国产| 黄色AV日韩| 五月丁香网视频| 久思思久视频| 激情伊人五月婷婷久久| 五月花亭亭| 九九热精品6| 亚州操人在线视频| 亚洲AV网址| 日韩亚洲视频| 色五月综合| 香蕉久操| 色九九综合热99| 婷婷性爱网| www.婷婷网| 无码激情AAAAA片-区区| 成人无码免费一区二区中文| 丁香深五月婷婷| 99视频在线啪| 丁香婷婷性爱| 久久A热| 精品久久66| 超碰a女人的天堂| 激情婷婷五月| 久久久久久五月天| 日韩视频女神99| 人妻AV在线| 深爱激情四射| 久久这里都是精品| 九九99精品视频在线观看| 精品人妻伦九区久久AAA片| 欧美色激情四射| 99热销国产这里有精品| 色丁香五月婷婷婷| 啄木鸟丝袜美女福利视频| 久热99热| 久热一区| 婷婷综合亚洲| 五月色精品| 久久久91| 五月天婷婷Av| 99操碰| 综合图区激情| 丁香五月播播| 99re在线免费视频| 深爱激情网五月| 婷婷五月色播放| www久| 欧美日韩五月婷婷| 丁香桃色综合网| 97碰人人操| 中文字幕成人网站| 99综合久久| 天天爽日日爽夜夜爽| 激情综合五月| 99热日本精品| 精品人妻午夜一区二区三区四区| 69综合在线| 三十路磁力链接| 99精品热| 日韩淑女人妻luan伦激情精品一区二| 草AV9999| 99色精品| Www99热| 思思热久久久在线| 另类在线| 婷婷久月| 大香蕉中文| 91干99| 五月丁香网站在线播放| 五月婷婷片| 丁香五月天.com| 久久色五月天激情小说| 97夫妻超碰| 99色在线视频观看| 五月天激情影院| 婷婷自拍| 嫩草乱码一区三区四区| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 91碰碰| 丁香五月久久| 婷婷成人综合| 亚洲一区国产传媒| 99热在线播放| 青青草Avb在线| 天天操电影院色狼性av| 色青青电影色五月| 性欧美大战久久久久久久83| 丁香五月 综合| 天天色亚洲| 97综合在线| 五月丁香六月婷| 婷婷五月电影| 中文字幕,综合,91| 婷婷娌伦网| 五月激情影院| 91九色视频在线观看| 玖玖婷婷五月天| 丁香花五月天社区| 亚洲成人婷婷| 第五婷婷伊人丁香| 色爱99| 国产av基地| 六月婷婷激情| aaaaa黄色| 日本久久精品| 六月婷婷日| 一本色综合色| 99r这里| 丁香五月婷婷亚洲天堂| 久久伊人五月天| 亚洲无aV在线中文字幕| 丁香五月情| 天天色播| 97婷婷色| 色婷五月天网站| 999热这里只有美国精品| 日韩AC在线免费观看| 99国产这里只有精品| 色婷婷影音| 99热综合网| 五月婷婷色播视频| 久久久99精品免费观看| 丁香五月激情无码视频| www.五月婷| 丁香激情四射| 五月丁香六月婷婷,婷| 国产真实乱了老女人视频 | 综合日本婷婷| 中文无码婷婷| 一本道综合网| www.99免费视频| 中文字幕在线日亚洲9| www色婷婷久久综合久色| AⅤ网站在线看| 亚洲操操操| 91精品丝袜久久久久久| 51精品国自产在线| 久久a热| 丁香综合婷婷开心激情网| 日本强伦片中文字幕免费看| 色色色色色色网| 九九無碼| 91人人妻人人操人人爽| 影音先锋色婷婷| 五月丁香AV、伊人业余、性色熟妇| 五月天大香蕉视频| 99热网站| 婷婷噜噜| 婷婷激情五月天7| 九热av| 五月丁香综合在线| 九九免费精品| 99re热精品视频国| 99热这里只有精品官网| 日本久久精品| 九九伦子片| 丁香婷婷影院| 激情六月丁| 国产99精品免费视频| 一级黄色操B| 激情久久久| 99色精品| av人人操| 激情丁香久久| www.97干视频| 婷婷操无码| 亚洲五月天激情| AV性爱网| 五月天婷婷成人资源站| 婷婷在线免费| 怡红院91a√| 91精品激情9| 九月丁香| www,超碰| 都市激情五月婷婷亚洲| 五月婷婷 欧美| 97性视频| 超级97碰碰| 欧美私人家庭影院| 日本人妻A片成人免费看片| 日本VA视频| 五月丁香 久久久| 五月丁香成人网| 婷婷七月丁香色色| 色约约视频一区二区三区四区五区| 五月天色图| 9久久精品| www.色婷婷.com| 开心五月色婷婷综合开心网| 婷婷成人综合免费视频| 激情综合五月| 99在线观看视频| 色婷婷色综合激情91| 超碰成人影视| 青青久久五月| 噼里啪啦完整版中文在线观看 | 五月丁香五月婷婷| 天天视频亚洲| 欧洲亚洲激情五月天在线| 99区视频| 欧洲亚洲免费视频区| 99熟女| 亚洲无码播放| 亚洲色碰| 色婷网| 伊人网大香| 色婷婷激情| 日韩av在线免费观看| 色婷婷操逼网| 日本三级网址| 天天se在线视频| 操逼巨乳91| 伊人网啪啪| 超碰在线中文字幕| 日韩欧美老妇性视频91久久久| 月色色综合婷婷网| 99久久视频| 站长推荐无码播放| 91综合国免费久入| 另类天堂| 欧美五月丁香啪啪响视频| 亚洲网站在线鸭子av| 激情宗合哪里能看| 五月丁香六月婷婷中文版| 欧洲亚洲免费视频区| 成人色五月天| 婷婷激情六月天视频| 久久思思精品| 丁香六月婷| 久久久婷婷五月亚洲97号色| 亚洲成人AV在线播放| 色欲久久综合| 九九综合久久| 播丁香五月婷婷欧美| 97干在线免费| enecarbon-materials.comWu染请涟系Bao护@wip1688 | 亚洲六月色| 欧美69色| 激情伊人| 欧美激情xxxXX| 99re这里只有精品在线观看| 少妇激情五月天| 色99热| 激情五月综合亚洲另类| 最新无毒无码AV| 久热在线观看视频9| 激情亚洲婷婷| 翔田千里aV中文字幕| 五月婷网站| 久操福利| 日韩免费视频| 大香婷婷| 综合亚洲色色| 色五狠狠| 99热这里只有精品66| 熟女人妻视频| 五月天久久网站| 丁香综合伊人| 五月丁香在线观看| 激情五月综合| 99在线看片| 99性视频| 99热这里只有精品最新地址获取| 手机旧版看人妻1025| 天天爽夜夜操| 99啊精典免费视频| 播五月婷婷开心| 婷婷丁香色无五月| 婷婷欧美| 婷婷综合九月| 色综合天天网| 伊人玖玖网| 无遮挡国产高潮视频免费观看 | 婷婷五月天黄色| 色综合综合网| 天天插天天日| 激情啪啪五月天| 这里只有在线精品| 精品99在线观看| 老师的粉嫩小又紧水又多A片视频| 亚洲av网址| 天天操天天操| 超碰在线观看99| 丁香九月色| 中文字幕婷婷五月天| 激情五月天婷婷在线网址发给我| 性做久久久久久久免费看| 色色婷婷丁香五月天| 另类图片 五月激情| 婷婷四色五月| 亚洲av无码影院| 久久成人综合五月天| 91九色精品女同系列| 91操女| 亚洲激情高潮| 激情综合五月婷| 香蕉AV777XXX色综合一区| 99热免费| 超碰人人干| 婷婷五月天视频| 色五月 婷婷, 大香蕉| 五月丁婷香| 日本美女上人| 热996精品在线观看| 99免费视频精品| 五月色网| 激情综合无码| 麻豆雪千夏| 9色免费网| 婷婷激情六月天视频| 超碰在线99| 丁香五月综合高清在线| 色丁香婷婷| 激情丁香久久久久久| 天天射色五月天| 色综色网| 99热这里只是精品| 亚洲精品又粗又大又爽A片| 色色综合色视频| 综合久久婷婷| 超碰九九热| 国产97色在线| 色五月婷婷操逼| 国产精品国产| 日韩在线观看亚洲| 久久这里只精品| 97偷拍在线视频| 99色亚洲| 丁香六月色| 99精品网| 五月丁香婷草| 大香蕉婷婷久久| 综合久久影院| 五月天综合婷婷| 日韩成人网址| 日本丁香五月| 少妇人妻人伦A片| 激情五婷精品网在线观看网址| 色情成人五月天| 亚洲激情 久久| 精品一二三区久久AAA片| 婷婷五月天激情偷拍| 办公室少妇激情呻吟A片在线观看| 99热网站在线观看| 六月成人网| wwwC0maV五月花| 97色综合视频| 六月丁香激情| 四虎成人精品永久免费AV九九| 日本九九九九| 激情99热| 琪琪色网址| 99热97| 美女黄频aⅴ视频| 亚洲六月色| 丁香香五月激情免费视频| 亚洲乱码日产精品BD| 丁香五月亚洲婷婷| 蜜桃婷婷狠狠久久综合| 久色激情| 天天综合亚洲综合网天天αⅴ| 精品夜夜澡人妻无码AV| 色丁香婷婷| 色激情五月| 五月综合无码| 国产性色蜜乳| 新男人天堂人妻| 97在线视频人妻九色| 色婷婷基地在线| 精品人妻在线免费观看| 天天做夜夜爽| 丁香五月婷婷基地| 亚洲乱码日产精品BD| 丁香五月六月婷婷殴美综合| 99熟女啪啪视频| 久99久视频| 五月丁香龟婷婷| 超碰免费人妻| 亚洲精品白浆高清久久久久久| 综合久久五月天| 五月色色色| 婷婷最新地址| 色丁香婷婷| 思思热在线视频99| 色色色婷婷五月| 日韩在线观看网址| 99热亚洲精品| 丁香激情六月天婷婷| 98色花堂98t.R| 欧美69久成人做爰视频| 伊人婷婷色| 五月丁香久久综合精品| 丁香五月色五月| 久久综合久色欧美综合狠狠| 久久五月婷婷丁香| 丁香六月色情| 国产精品操| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 午夜丁香婷婷| 久热这里只有精品99re| 99 热| 激情熟女网| 国产美女无遮挡裸体毛片A片| 丁香婷婷激情| 五月丁香六月婷婷a v| 色婷婷免费视频| 久久久婷婷五月天| 99久久极情精品一区| 亚洲操b| 日日噜噜久久婷婷五月天 | 激情综合色| 五月婷婷六月丁香综合在线| www.minyis.com【JT】实力收量可预付TG@LXSPSW8| 激情五月婷色| 国产亚洲精品AAAAAAA片| 五月婷婷啪啪啪| 婷婷五月激情天| 内射激情在线| 26UUU| 99九九在线观看免费| 婷婷酒色网| 人妻丰满精品一区二区A片| 人妻人人操| 综合久久六月| 狠狠色色色| 激情又色又爽又黄的A片| 99久久婷婷国产综合| 五月丁香婷婷综合网| 俺也去综合| 久久综合热17c| 久久丁香| 激情婷婷色色| 人人干女人| www.玖玖婷婷在线| 九九久久9 9在线观看| 91碰碰| 色婷婷狠狠| 97色婷婷成人综合在线观看| 丁香六月综合| 亚洲这里只有精品| 婷婷精品综合| 激情五月色综合国产精品| 69人人操人人爽| 婷婷色色五月| 婷婷五月天基地| 色999亚洲人成色| 一级精品999WWW| 欧美丁香五月| 亚洲人人操| 操骚货在线| 可以直接看的av| 丁香五月成人av| 99这里只有精品视频| 成人色五婷婷| 五月丁香六月婷婷网| 天天透天天爱| 五月欧美丁香在线观看| 久久 天天| 婷婷色在线视频| 天天综合五月| 99精品久久久| 五月丁香综合在线| 亚洲色婷婷| 亚洲中文字幕在线观看| 国产3p露脸普通话对白| 久久精品无码一区| 99人人爽| 啪啪五月综合| 91精品久久久久久久久久久久| 婷婷97碰碰| www.99色| 中文字幕+乱码+中文字幕在线观看| 欧美久久五月婷婷| 五月四色婷婷| 国产婷婷五月色情综合| 九九热99熟女| 久久综合五月| 青青草视频免费观看| 日本久久色| 狠狠色网| 六月婷婷综合| 五月婷伊人| 成人五月天视频播放| 思思热在线| 丁香午夜天| 丰满少妇乱A片无码| 亚洲激情六月| 嫩模aV在线| 狠狠人人| 欧美婷婷五月丁香| 亚洲av免费在线| 天天爽天天操| 婷婷日本在线| AV在线观看网站| 青草视频在线蜜臀| 第四色首页| 久久五月婷| 在线中文AV| A级毛片高清免费不卡播放谢谢谢谢| 亚洲不卡| av在线色五月丁香婷区久| 精品99在线观看| 久久婷婷色| 极品五月天| 这里只有精品亚洲| 巴基斯坦粉嫩无码视频| 99热人人| 九色成人AV在线| 九九九九综合| 婷婷五月激情在线| 九九99免费视频| 狠狠干.com| 久久色婷婷| 欧洲免费视频色| 五月天婷婷免费| www.seqingwuyuetian| 色色色婷婷五月| 婷婷综合伊人丁香| 久久激情综合| 丁香五月瑟瑟| 国产激情在线| 色色网五月激情| 五月天激情图片| 97干资源在线观看| 97色色-99久久| 婷婷五月天AV| 大地9中文在线观看免费高清| 色爱综合五月| 婷婷五月天AV激情| 大香蕉中文| 大香蕉久久综合网| 欧美天天草人人草| 亚洲国产精品VA在线看黑人| 欧美成人精品三区综合A片 | www.婷婷| 蜘蛛女侠2003满天星免费观看| 国产人妻人伦精品一区二区| 久久久.COM| 六月婷婷在线| av免费在线看不卡无毒| 99er日韩| 96精品久久久久久久久| 99热伊人综合| 草AV9999| h在线看免费版在线看| 久久综合伊人77777蜜臀| 久久66成人网站| 疯狂做受XXXX高潮A片动画| 色一情一乱一乱一区91| 婷婷激情视频欧美视频自拍视频欧美剧| 丰满少妇乱A片无码| 九九热精品| 五月丁香六月激情综合 | 伊人网欧美在线男人天堂五月丁香| 饮料下药迷倒漂亮女同事强干| 亚洲AV成人一区二区在线观看| 玖玖在线资源视频| 综合色播| 色情综合| 婷婷激情性爱| 97碰人人操| 天天色噜| 综合久久综合综合| 激情五月少妇| 久热久69| 99热精品一| 亚洲黄色网址| 色色色.com| 老妇六区| 在线A色| 538在线精品| 五月永久激情| 国产成人精品一区二三区熟女在线| 色婷婷狠狠干| 五月婷婷六月丁香| 色色色视频免费无码| 99亚洲天堂| 婷婷五月丁香狠狠| 日产精品一线二线三线芒果| 婷婷五月综合色中文字幕| 五月天桃色深爱网| 婷婷亚洲五| 日本天天操| 五月综合婷婷网| 人人色人人弄人人操| 99久久99热这里只有精品| 欧美天堂婷婷日韩|