久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(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桌面應(yīng)用的讀者。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ù)選型復(fù)盤Canvas、OpenCvSharp4搭配的取舍2.1 為什么UI層鎖定WPF和Canvas技術(shù)選型時第一爭議是WinForms和WPF選哪個。WinForms上手快GDI畫多邊形也簡單但考慮到后續(xù)要做圖層疊加、頂點拖拽、縮放平移這些交互我更傾向于WPF。WPF的Canvas是一個極其靈活的面板子元素可以通過Left和Top屬性進行絕對定位天然適合標記點的坐標管理。而且WPF的圖形元素Line、Polygon、Ellipse都支持矢量渲染縮放不模糊用來做交互標注體驗遠好于WinForms。Canvas這個控件本身不復(fù)雜但它為核心交互提供了良好的基礎(chǔ)每個頂點是一個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風(fēng)格和OpenCV官方非常接近文檔全社區(qū)案例也多。而且它同時支持.Net Framework和.Net Core/6/7配WPF沒有歷史包袱。Emgu CV也用過但它的某些API命名和類型轉(zhuǎn)換不如OpenCvSharp4直觀調(diào)試時心智負擔更重。OpenCvSharp4的NuGet包會把OpenCV運行時一并帶上安裝完直接能用不需要手動配置環(huán)境變量這對交付工具類的項目來說省了不少事。版本號建議直接上OpenCvSharp4當前較新的小版本記得同時安裝對應(yīng)平臺的運行時包比如OpenCvSharp4.runtime.win。2.3 技術(shù)棧邊界劃分整個架構(gòu)的邊界一開始就要劃清楚UI層只負責人機交互不碰像素數(shù)據(jù)算法層只接收坐標數(shù)據(jù)不關(guān)心界面長什么樣。我設(shè)計了一個中間數(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應(yīng)用程序項目后NuGet安裝兩個包Install-Package OpenCvSharp4 Install-Package OpenCvSharp4.runtime.win安裝完成后在代碼里引入命名空間using OpenCvSharp;一個容易忽略的坑OpenCvSharp4依賴的VC運行庫版本可能和本機不同部署到客戶機器上如果報錯缺少runtime要么裝對應(yīng)運行庫要么考慮自包含發(fā)布。我后來直接把VC運行庫打進了安裝包里省去了現(xiàn)場排查的麻煩。3.2 XAML布局與Canvas容器設(shè)計窗口布局用Grid分兩塊左側(cè)是原圖顯示區(qū)右側(cè)是ROI列表和操作按鈕。顯示區(qū)放一個ScrollViewer里面套一個Canvas圖片用Image控件鋪在Canvas底部。這里有一點很關(guān)鍵Image的width和height要顯式設(shè)置不要只依賴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初始沒有設(shè)Source加載圖片后再實際設(shè)置。Canvas的寬度高度初始值跟隨圖片尺寸同步更新。3.3 坐標體系轉(zhuǎn)換Canvas坐標與圖像原始像素的映射真正的核心邏輯在這里。Canvas上顯示的圖片尺寸不一定是原始圖像尺寸所以鼠標在Canvas上的坐標并不等于圖像里的像素坐標。兩者之間需要一個比例系數(shù)轉(zhuǎn)換。加載圖片后我記錄兩個值作為基準_originalWidth原始圖片的像素寬度_originalHeight原始圖片的像素高度同時把Canvas和Image的寬高都設(shè)置為原始像素寬高這里先不考慮縮放后面縮放版本再討論。換算公式很直接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設(shè)為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設(shè)成相同的尺寸目的就是讓Canvas坐標系和圖片顯示坐標系完全重合。不重合的做法也能做但每次都要減偏移量交互代碼會埋很多隱患。4. 多邊形標注交互設(shè)計點、線、閉合與拖拽調(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處理預(yù)覽線用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不受影響。這里提到的預(yù)覽線鼠標移動時的橡皮筋線沒有包含在上面代碼里我在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; }閉合后應(yīng)移除_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標志防止拖拽時重復(fù)判定。拖拽過程中也要更新之后的點記錄否則新計算ROI時會拿到過期坐標。這個功能初版沒做測試直接上真機出現(xiàn)了拖動過程中頂點漂移的嚴重問題——原因在于MouseMove用e.GetPosition(DrawCanvas)拿到的是相對Canvas的坐標可拖拽的點坐標本身也在Canvas坐標系兩者單位一致不該有偏差。排查后發(fā)現(xiàn)是Image的Stretch被設(shè)成了Uniform圖片實際顯示尺寸跟Canvas尺寸不一致導(dǎo)致坐標錯位。最終把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預(yù)覽展示在界面右側(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縮放導(dǎo)致標注點偏移半條街第一版在開發(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設(shè)置PerMonitorV2 DPI感知。使用SetProcessDPIAware簡單直接在絕大多數(shù)場景下夠用。這一改之后坐標繪制和鼠標點擊對齊了問題消失。6.2 坑二Mat對象不釋放導(dǎo)致內(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)用方負責釋放。寫代碼時形成這個習(xí)慣后長時間反復(fù)開圖測試內(nèi)存穩(wěn)定在初始水平附近沒有再漲。6.3 坑三預(yù)覽線與真實繪圖元素互相覆蓋、殘留開發(fā)初期MouseMove里的臨時預(yù)覽線直接Add到Canvas結(jié)果閉合后忘移除界面上出現(xiàn)一條跟隨鼠標跑的虛線非常尷尬。后來統(tǒng)一封裝了一個_dynamicLayer所有臨時性元素預(yù)覽線、拖拽提示都放這個專用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避免多邊形對象自引用導(dǎo)致死循環(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訓(xùn)練Pipeline毫無障礙。7.2 批量提取的并行化實現(xiàn)當同類圖片幾十上百張時一張一張手動圈顯然不行。好在ROI坐標通常是預(yù)設(shè)的模板坐標來自一張標準圖批量提取就是把這些坐標按比例映射到每張待測圖上然后用同一個掩碼流程執(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ù)和圖像處理鏈路解耦的基礎(chǔ)上只要初始的多邊形標注交互穩(wěn)定可靠上層怎么玩都很順手。從我這個項目的經(jīng)驗來說先把標注這層地基打牢比急著堆功能重要得多。最后分享一個實操小技巧如果你的多邊形頂點特別多繪制時建議每加一個點就先移除再重繪整個Canvas而是對新增點只做一次增量繪制尾部補一條新邊。否則上百個頂點的多邊形每次微調(diào)都會卡一下用戶體驗天差地別。我的處理是在Redraw之外加了一個AppendVertex方法專門處理增量場景性能開銷從毫秒級降到微秒級涂抹體驗完全不一樣。這塊瓶頸雖然不復(fù)雜但做了之后流暢度提升非常明顯。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
极品色社| 日本欧美成人片AAAA| 日韩人妻一区二区| 人妻在线臀日韩| 操逼免费视频无码国产| 日韩图色| 91综合天天看| 欧美综合传媒| 日韩无码AB| 激情开心五月天| 91香蕉视频在线观看免费| www.成人无码| 啊啊啊啊,啊啊好多水| 亚洲最大黄网| 免费的av网| 韩国一级婬片A片AAAAA| 精品一区二区综合熟妇| 精品毛片av一区二区| 亚洲欧美在线丝袜| 亚欧洲日韩国产精品| 日本黄色天堂| 91中文字幕在线观看| 天美欧美国产| 在线中文AV| 欧亚成人在线视频| 中文字幕无码不卡啪啪| 国产AV人人夜夜澡人人爽麻豆| 99综合自拍| 亚洲另类久操网| 丁香成人五月天| 国产一区二区三区影片| 91 刺激在线| 97色五月天完| 精品国产乱码久久久| 91欧美性| www.夜夜操| 亚洲欧美日韩免费电影| 日本五十路在线| 亚洲一区二区三区欧美日韩| 成年女人18级毛片毛片免费观看| 91bbbbbb| 97久久网| 一级啊性爱在线视频| 浪人综合网| 国产精品熟女乱伦| www.91欧美| 久草线上视频免费看| 91美女看B| 天操天操夜操夜月操月年年操操| 欧美激情专区| 人妻aa| 国产精品一二三免费网站| 九九99久久| 久久亚洲熟妇在线视频| 欧美激情专区| 大胆91| 国产久久男人天堂| 无码操逼视频一下| 伊人AAA| 欧美天天影院| 91精品微拍福利| 婷婷久久五月| 欧美欧美少妇| 色婷婷丁香| 超碰97久久国| 手机在线视频国内精品| 欧美亚洲se91| 亚洲日本激情| 岛国不卡超碰护士AV在线播放| 伊色久人大在线| sewuyueav| 免费观看的黄色的网站| 午夜天堂精品久久| 搞中出久久| 91亚·色| 人人操人人摸人人骑| 97久久视频| 超碰久草| 91女网站| 在线观看一级α片刺激高潮视频| 免费夜夜爱黄色视频毛片| 超碰吊日色| 96久久精品一二三区色欲| 天天日天天舔天天喷天天射| 免费在线看黄片av| 99综合自拍| 再深点灬舒服灬太大了添视频 | 国产少妇内射| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 久草男人天堂| 日本幼女18+| 超碰97亚洲区| 国产福利影视| 人人射人人操人人摸| 亚州免费啪啪视频| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 香蕉在线一区二区三区| 高清视频一区| 人人爽夜夜操| 久久久久久亚洲中文| 久久人爽| av资源在线观看少妇| juliaann精品熟女一区| 国产农村妇女精品| 超碰碰激情97+久| 国产精品久久妻无码网站 | 综合欧美色图| AA丁香综合激情| 中国大陆国产高清AⅤ毛片| 91精品无码人妻系列| 一本大道久| 嗯嗯嗯好爽| 88在线一区二区三区| 97自拍视频在线| 日韩精品中文字幕一| 美欧老女人97| 五月天激情网站| 四虎影视精品| 久久久久斤小| 岛国小电影| 久久亚洲精品成人av| 欧美激情精品| 亚洲中字慕不卡| 另类图片五月| 97色碰| 日韩99精品视频综合区| 欧美色亚洲| 国产吹潮女在线观看| 亚洲欧美在线观看2021| 成年人黄色小视频网站| 2019AV天堂| 欧美午夜视频精品久久| 国产精品一区二区后入| 丁香色狠狠色综合久久小说| www.伪伪| 男人天堂久久日韩| 国产热av| 91老女人| 另类亚洲一区二区三区| 婷婷91| 天天做天天爱天天高潮| 欧美性暴力猛交XXXX| 超碰97综合网| 另类图片欧美激情综合| 黄片免费看黄片免费看| 国产精品99久久久www| 无码视频黄色网战| 一牛影视成人片免费| 午夜欧美神马久久久久| 狠狠2050在线观看| 黄色av网站在线播放| 久久精品老司| 91丨熟女丨丰满熟女| 女人双腿搬开让男人桶| 亚洲精品久久久久久久久豆丁网| 天天情欲宗合网| 91宗合网| 色色婷婷丁香| 搡老熟女国产1000部| 91综合色噜噜| 开心婷婷五月| 久草线上视频免费看| 一本精品日本在线视频精品| 久久99国产综合精品女同| av线电影| 偷拍亚洲熟女视频播放| 欧美极品女人的天堂| 啊啊啊啊啊在线| A 天堂| 伦理日韩国产久久| 久久久久久亚洲中文| 中文字幕一品色图| 日韩综合色图| 夜夜狼人妻| 欧亚揄拍偷拍精品视频| 人妻啊啊人妻啊| 亚州五月| 中文字幕欧美精品亚洲日韩蜜臀| 97亚洲在线| 亚洲无无码αⅴ每日更新| 久久精品国产亚洲AV片多多| 丁香婷婷大香蕉| 日韩人妻少妇中文字幕| 99热只有| 久久久久网站-538在线视频-欧美永久乱码| 亚洲另类久操网| 在线岛| 美女上床网站| 最新精品久久蜜桃 | 久久美女国产| 天天影视91看看| 色色色色色色色色色色色色色色综合| 国产JDAV无码视频在线观看| 男人的天堂2000| 大香蕉丝袜一级片| 国产大陆天天艹| 成人开心网在线视频| 97人人模人人爽人人| 亚洲强奸乱伦影视网| 91呆哥人妻| 日韩人妻操B| 大香网伊人久久综合网eew| ji熟女.com| 国产精品动态一区二区三区四四| 日韩免费人妻色情网站| 91精品无码人妻系列| 免费岛国一级片| 久操视频在线| 欧美午夜视频| 嫩草伊人久久精品| 久久e6只有精品| 狠狠色丁香| 97资源制服丝袜| 日本性爱欧美性爱| 国产一区二区在线播放量| 黄色工厂这里只有精品| 农村少妇久久久久久久| AV色五月| 少妇人妻在线| 99久在线精品99re8| 97超碰中文| 欧美激情色婷婷花野真衣一区二区| 大香蕉123| 欧美日韩操逼动图| 人人人人插| 自拍偷拍 日韩欧美| 久久久久久久97| 青青青在线高清视频在线一二三四区| 午夜福利 成人 91| 丰满人妻-区二区三区| 老熟女阿 国产91| 欧美日韩天堂| 可乐操亚洲蜜911| 人人妻人人爽一区二区三区| 人妻丝袜一区二区三区在线| 亚洲伊人成综合成人网| 少妇人妻好深太紧了vr91| 国产传媒午夜理伦精品| 亚洲欧美中文一区二区三| 亚洲最新中文字幕免费| 国产成人无码久久精品| 人妻天天夜夜爽一区二区| 久久久999日本大片| 啊啊啊好湿久久| 欧洲精品久久| 国产精品一二三在线看| 思思热er精品视频| 91九久| 亚州色图欧美| 免费国产视频| 亚洲天堂7777| av情色影音| 日本免费一区二区不卡| 久久婷婷电影网| 欧美一级特黄淫片在线观看| 97色色色| 天天综合网亚洲综合网| 人人操欧美风骚| 激情综合网五月婷婷五月天| 91久青| 天天综合网合集91| 欧美日韩性爱电影在线| 涩涩五月天| 天天日美女的B| 亚洲中文字幕熟女| 久热这里| 天天综合网在线91| 丁香九月激情啪| 97超碰中文| 操逼视频国产无套| 操我啊啊啊啊啊| 欧美性夜| 色色99| 成人日本片久久久蜜桃| 久久久精品无码亚免费| 久草精品一区| 伊人黄色视频免费观看| 久久精品成人一区二区三区蜜臀| 欧美日韩免费性爱| 丝袜美女诱惑 91 视频| 久久男人精品| 天欧美在线| 精品一啪| 97久久综合网| 久久人妻视频网| 亚洲女人91| 五月丁香激情综合| 97天天综合| 成人AV素股で擦久久| 大学生美女口爆| 偷拍欧美激情| 欧洲亚洲国产综合在线| 日韩二区三四区五区六区在线看| aⅴ日韩成人电影av在线免费看av大全| 美腿丝袜高跟网免费视频免费视频| 自拍偷拍 日韩欧美| 青青操在线亚洲视频观看欧美在线 | 极品丝袜无码| 99在线无码精品秘 入口黑人| 亚洲大胆人体av| 无码 有码 国产18p| 亚洲欧美综合网| 久久久久国产亚洲一区欧美色图日韩| 五月丁香六月综合缴清无码| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 精品视频免费在线一区| 999国产精品999久久久久久| 超碰97资源大奶| 欧美日韩国内不卡| 超碰在线一区| 九九超碰综合网| 91xingse| 99热这里是精品| 中文人妻av高清一区| 伊人性在线视频| 亚州色站 日韩电影| 色色色色网站| 国产精品久久久久亚洲av| 八人操人人摸人人看| 夜夜嗨免费视频| 另类av天堂| 伊人亚洲国产一成人久久精品,久久| 东京热视频网| 国产色图乱伦| 色五月AV| 亚洲色交| 丰满人妻一区二区三区四区| 亚洲男人天堂2013| 99操| 精彩国产视频播放1区2区| 中文激情网| 亚洲第一成人影院色播| 亚洲人妻中文高清| 黄色免费网页无码| 殴美在线AⅤ| 欧 美 自 拍 偷 拍| 色视频蜜乳| 久久精品国产亚洲AV无码做| 一区| 91真人天天在线| 欧美色图私拍91| 久艹伊人精品综合在线| 绯色AV粉色AV蜜臀AV| 久久久艹艹艹| 无码人妻丰满熟妇奶水区毛片| 午夜男人天堂| 日韩 成人 有码| 国产精品爱欲| 亚洲av淫乱| 久久精品性| 蜜桃久久一区二区三区| 久久25| 91天射| 大香蕉在线SuP| 亚洲人妻色图| 婷婷五月天久久久| 中文字幕在线观看视频www| 久久五月婷| 日本三级日本三级三级人妇四虎| 欧美白嫩女HD| 欧姜老司机| 久操操AV电影| www.色综合| 日本免费一区二| 欧美少妇色综合| 91性网| {男男暴菊gay无套网站| 亚洲精品国产精品乱码不99| 无码人妻一区二区一牛影视| 2017天天透天天通天天擦| 天天综合~91| 热思思免费视频| 日本中文字幕在线视频| 青青草国产盗摄一二三区| 日韩无码人妻中字久久三区四区| 久久久久久久久久va| 久热9| 91视频综合在线| a片久久久久久久久久久久 | 成人色女网| 久久线上视频免费看| 国产精品熟女九色九色蜜臀| 天天操女人| 91M一社| 91足交| 欧美日韩淫加| 26uuu久久| 亚洲va综合va国产va中文| 亚洲色图自拍| 日操粉逼逼| 小明看看网址| 欧美色性爱| 极品久久久久久久久久久久久久| 欧美性xxxxx狂欢| 国产成人资源| 国产91会所女技师在线观看| 欧美在线伊人色| 欧美影院一区二区三区| 蜜臀亚洲中文| 国产11页| 嗯嗯啊啊啊好爽| 久99| 91P0RNY大屁股人妻| 麻豆天美电影一区二区| 国产精品黑人一区二区三区| 国产高清不卡视频| 少妇干B| 九久久精| 欧美久久毛片基地| 久久精品国产亚洲AV高级北京| 免费97视频| 99久久婷婷| 国产在线播放成人免费| 91爱做| 免费一级毛片在线视频观看| 日本韩国五十路六十路七十路老熟女作爱视频网站 | 开心五月天激情网| 中文字幕久久婷婷丁香五月天| 啪啪视频mP4| 欧美天天干| 欧美97免费| 德国一二三不卡| 污污汅18禁网站在线永久免费观看| 毛片麻豆91糖心精品毛情片| 亚码激情| 国产呦精品一区二区三区下载| 东北女人高潮视频| 久草在| 久久激情视频| 国产欧美一级在线观看| 日韩性爱小视频| 丝袜美腿91| 久久爽爽精品| 超碰 另类 欧美| 色婷婷丁香五月| 911av网站免费观看| 国产亚洲禁久一区二区| 加勒比海色香蕉婷婷| 一本色道久久综合熟妇| 禁十八久久| 亚洲欲色9532548967一区| 久久久久亚洲Aⅴ无码| 摸奶性爱视频网站在线免费播放| 78m啪啪啪| 少好三P| 久久久久9999精品九九九| 英伦大奶子熟妇吊带| 人妻AV 中文字幕的| 亚洲激情在线一区二区| 亚洲综合精品国产一区| 亚欧无码在线| 8050午夜少妇无码| 国产日本久久免费精品| 手机看片1025| 少妇无码999| 日本道日本道中文字幕日本道最新日本道在线观看 | 日本顶级天天操狠狠操夜夜操中文字幕| 国产精品久久久久久久久久久久久久久 | 日韩有码一区三区| 18禁久极品美女久久哦哟呀!| 亚洲熟女人妻中文字幕一区二区| 91影库| 日韩丝袜高跟制服在线观看| 日本操逼无码| 校园春色之综合网| 大香蕉视频啪啪啪啪| 亚洲成熟国产精品美女| 婷婷8月天青娱乐| 国产在线激情视频| 精品对白久久不卡| 视频在线观看青青99国产| 欧美综合第一| 狠狠躁日日躁夜夜躁A| 日韩黄色一区二区三区| 黄色性爱网网| 国产 日韩 另类 视频一区爱| 多毛小伙内射老太婆| 91在线免费精品视频| 91 偷| 伊人四虎综合| 欧美玖玖爱免费玖玖| 男人的天堂在线| 久操视频免费在线观看| 91国精产品| 色综合加勒比四四季| 亚洲综合春色| 老熟女乱伦一区| 日韩AV一区二区三区三州三州| 97中文字幕色| 精精夜夜| 韩日男人的天堂| 久7色| 激情五月天色播| 无码国产精品午夜不卡( | 粉嫩小泬久久久一区二区| A啊啊在线观看| 91 综合 色| 麻豆区久久久久亚| 一本一道久久综合久久| 超碰97COm中文| henhen91| 精品日日人妻| 97超碰久久| 亚洲少妇色| 成人性交免费视频| 夜夜操天| 青娱乐淫乱1314| 中文字幕一区二区三区蜜臀| 在线综合网| 91色艳| 人人操人人色网| 人妻碰碰碰碰碰碰| 中国一级特黄大片护士| 精品小视频在线| 激情五月综合开心五月| 四虎视频在线观看| 在线看片国产精品每日更新| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 日韩精品-原创伙伴| 97综合激情| 亚洲无线码欧洲精品区别| 国内毛片无码一级毛片| 丰满人妻-区二区三区| www色色色com| 3PAV乱伦视频| 人妻熟女一区二区三区在线| 性做久久久久久久| 97亚洲精品超碰| 色哟哟-国产专区| 欧美性爱第一区| 大香蕉日亚洲日本亚大| 精品久久久久久亚洲| 日本成人免费一区二区三区| 色天欧美| 久久大香蕉手机高清视频| 最新亚洲人成网站在线影院| 超碰在线综合97| 国产91美女高潮| 欧美日产国产在线成人第一区| 老司机午夜精品福利视频一区二区| 天天干天天操天天干天天操 | 强奸a片网| 日本成熟少妇A∨网站| 本道在线| 成人久久精品| 欧美色图20P| 国产十八禁视频| 91久精品| 99色热| 国产精品一二三在线看| 男女做爰猛烈动高潮A片免费应用| 五月天亚洲网| 亚洲男人的天堂网| 亚洲综合性感在线| 男人的天堂,欧美亚洲另类国产日韩,日本高清一区二区 | 蜜臀AV一区二区三区激情综合| 国产精品熟女丝袜一区二区| 一区不卡在线观看av| 欧亚日韩一区在线| 天天拍夜夜| 黑人性暴力毛片| wuyechaopeng| 97网址97| 无码人妻毛片丰满熟妇精品区| 美腿丝袜偷拍亚洲欧美| 亚洲情色一区三区| 亚洲精品欧洲精品| 91成人在线| 人妻在线大香蕉| 偷拍在线观看视频| 欧洲亚洲天堂精品 | 天天日天天搞天天干| 日本在线观看网址| 色波多| 2019精品国产无码成人| 人妻少妇被猛烈进入中| 亚洲成人一区二区精品| 中文自拍欧美影视| 国产精品三级视频网站| 九九黄色网| 精品一区二区三区最新| 亚州色图欧美| 欧美性少妇| 2017天天操| 欧美真人抽搐一进一出gif| 伊人黄色片| 欧美日韩操操操| 久久婷婷五月综合| 色眯眯射| 色噜噜人妻av中文字幕| 超碰97人妻在线| 欧美十八禁导航成人| 香蕉久久国产AV一区二区| 亚洲18禁| 另类老少妇| 欧美日韩中文视频播放| 成人aⅴ一区二区三区| 五月综合久久| 91嫩草在线| 日韩欧无码一区二区三区免费不卡| 亚洲精品国产无码高清| 青青操青娱乐| 超碰久草| 久久夜黄色无码A级大片| 能看的AV| 另类老少妇| 小视频国产| 色性综合| 久久香蕉国产线看观看亚洲女人 | 91狠狠综合久久| 无码操逼网| 另类av天堂| 国产精品高潮久久久无码| 超碰是碰在线观看| 性影在线视频| 99国产精品免费| 一区二区三区国产在线播放 | 五月丁香拍拍激情综合三级| 激情亚洲天堂| 婷婷在线视频在线观看| 看黑人AV不卡| AV乱伦专区| 67194无码不卡| 久久久久久精| 亚洲少妇综合在线播放| 欧美日韩黄片精品在线| 久热精品在线| 国产又操| www.av家庭乱伦| 超碰综合色| 欧美黄片欧美黄片xxx| 日比av无码| 久久天天躁日日躁狠狠躁 | 黄色在线网站| 天天拍夜夜| 人妻人妻天天碰| 91色艳| 91精品国产日韩欧美综合| 欧美se综合| 2019午夜福利视频| 中文字幕丝袜美腿| 狠狠狠狠狠狠| 少妇高潮对白在线观看| 久久国产逼| 黑人性欧美| 91丝袜美腿片| 躁躁日曰躁2020| 99在线免费观看| 久久久久久国产无码精品| 国产午夜精品理论片一二三区区| 国产精品69久久久久孕妇欧美| 欧美se亚洲| 久超碰在| 激情久久久| 日韩亚洲Av人人夜夜澡人人爽| 成人免费视瓶| 国产精品久久久啊| 日韩有码中文字幕女同性恋 | 99这里有精品| 97最新在线播放视频| 人妻81p| 国产福利一区二| 不卡日本一区二区| 热热色中文无码| 国语精品av| 99日视频在线免费| 97视频在线观看网站| 日韩精品怡红院| 美女AV一区二区| 欧美 综合| 久草资源在线视频官方总站日韩丝袜美腿| 九九热免费国产视频婷婷伊人 | 国产精品嫩草久久久久| WWW啪啪的com| 久久久久久电影| 亚洲欧美日韩免费电影| 久久精品欧美一区二区三区不卡| 思思视频免费看网站| 丝袜人妻av一区二区| 人妻一区二区三区四区视频| 国产精品999aaa| 免费AV中文网在线观看| A级片日韩欧美国产欧美视频精选观看 | 亚州色图欧美| 免费农村成人少妇人妻Aa一区二区视频 | 99国产在线 精品 视频| 26uuu偷拍亚洲欧洲综合| 一个国产在线综合网站| 在线免费观看日韩一区| 十八岁啪啪视频免费看| 久久九九国产精品| 91麻豆va国产精品| 婷婷久久五月天| 艹我哪美一区无码| 欧美综合加勒比在线| 久久久久久91香蕉国产| 欧洲小说色图视频另类| 97爱啪| 国产成人五月天丁香花| 校园春色 欧美| 强奸乱伦AV一天堂网| 一区不卡在线观看av| 国产高清MV操逼视频| 久久男女激情视频网站| 人人摸人人干| 欧美综合第一| 欧美色图在线视频少妇| 亚洲美女精品九九视频| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 99热国产精品| 欧美人妻少妇| 伊人黄色片| 91人妻Pr| 一区二区三区网站日日骚| 国产白领连续中出在线播放| 999久久久久久久久| 特色a在线上| 国产精品永久免费10000| 色噜噜人妻丝袜a∨先锋影| 日韩精品区二区三区不卡| 狠插 制服 自拍| 不卡六六在线91| 极品色| 色嗨嗨在线| 亚洲春色激情小说| 91黑丝操| 家庭乱伦麻豆| 人妻精品一区二区在线| 中文字幕精品丝袜| 9九九国产| 午夜男女爽爽爽影院视频| 丁香五月天激情网站| 超碰97资源中文字幕| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 5月婷婷6月六月丁香| 国产视频一区二区在线| 国内成人圈中文字幕无码视频| 亚洲人妻在线精品| 亚洲精品一区二区三区在线播放| 澳门成人网站久国产日韩| 人妻天天爽夜夜爽2| 欧美精品精品一区二区| 色人久久| 97se综合| 中文字幕一区二区三区四区在线视频| 无套内射性感少妇视频| 中国熟女网站| 综合亚洲欧美精品日韩?v| www色色色com| 亚洲怡春院| 偷拍三区| 日本淫色网| 久久人妻熟女一区二区 | 91超碰在线| 9久久精品| 在线小视频| 黄色电影在线播放综合网站| 亚洲 中文 女同| 97精品在线视频| 天天插天天操| 亚洲情色 无码专区| 亚洲导航深夜福利| 亚洲区限制级| 1人人看人人摸人人操| 美女高潮视频91| 91精片| 欧美1727免费观看视频| 欧美日韩亚洲天堂| 99热亚洲| 亚洲美女精品九九视频| 一区二区三区视频| 欧美另类丝袜熟女| 久操婷婷| 久久精品无码一区二区三区| 亚洲综合色婷婷| 超碰色大香蕉| 97色在线| 97超碰色色| 人妻天天操天天爽视频免费| 日韩色| 九月丁香婷婷| 日韩一级久久毛片| 色天使大香蕉| 日本黄色大片一级视频免费麻豆| 九九拍拍精品视频在线播放 | 女沟厕偷窥piss小便| 岛国小电影| 精品美女久久久久| 亚洲色图美腿丝袜| yellow网站免费观看日韩高清无码| 亚洲精品国产av天美传媒| 粉嫩粉嫩一区性色AV片| 国产女主播视频在线观看| 欧美成人黄网色网站| 美女黄色91| 亚洲丝袜色| 亚欧无码线免费观看视频| 神马久久久久久久久久久久| 欧美黄色片在线播放| 色悠久久久av| 色五月综合| 精品一级毛片在线观看| 久久111| 欧美日韩操操操| 另类欧美综合| 一区二区三区国产精产| 亚洲无吗在线视频| 97超级久久| 精品久久久久瑟瑟| 岛国黄色短视频| 视频二区美腿制服人妻欧美| 97久久久久久久精| 国产精品熟女九色九色蜜臀| 成人资源中文字幕在线观看| 加勒比无码一区二区三区| 国产精品视频91久久| 精彩久久中文| 国产欧美日韩女同性恋ww喷水精品| 日本东京热久久久电影| 97超碰免费生活| 欧美另类色图片| 粉嫩av久久一区二区三区| 曰本道人妻久久久在线不卡色视频| 丁香五月影院| 国产成人精品必看| 天天天干977| 中文字幕免费观看| 婷婷五月av| 国模私拍一区二区三区神乳| 99久久免费看精品国产一区| 不卡码视频| 欧美综合区| 亚洲国产精品V?在线播放| 超碰视97中文| 少妇一区二区三区在线观看| www.色操逼| 内射日韩大臀美女| 男人a天堂手机在线版| 国产精品一区二区三区免费视频| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 中文字幕av亚洲在线| 国产色产精品在线观看| 激情久久日韩精品中文字幕麻豆| 精精夜夜| 9久热| 久久毛卡| 三级日本一区二区三区| 老熟女阿 国产91| 1024手机看片欧美日韩| 亚洲国产精品乱码在线观看| 99热只有这里有精品| 被男人吃奶很爽的毛片| 人妻久久一区二区三区 | 亚洲色性情三级| 激情五月天婷婷| 日韩在线观看字幕精品| 欧美日韩啪啪电影| 亚洲色图 欧美| 五月天日日操夜夜操| 好屌色综合| 色老汉色| 中文字幕二区日韩天堂| 国产成人久久久精品免费AV| 在线播放一级无码视频| 人妻色偷色噜| 另类天堂| 97视频免费播放| 国产丁香精品露脸视频| 91色综合色| 国外91| 免费成人在线熟妇网| 亚洲综合影片| 色眯眯射| 欧美丝袜激情| 精品久久久久黄少妇| 东北黄色电影| 久久精品亚洲婷婷| 久久国产精品一级二级三级| 五月色综合| 天天做天天爱天天高潮| 超碰免费在线| 夜夜操狠狠操| 精品女人999| 精品四五区| 久久久久国产亚洲一区欧美色图日韩| 欧美亚州手机在线| 青娱乐导航AV| 真实高潮91| 97在线欧洲| 98精品国产乱码久久久久久| 污污污8888| 久9久精品视频| 亚州欧美总和| 伊人9| 久久老熟女| 先锋女优在线观看视频| 欧美97在线欧| 日韩一级久久毛片| 2017人人操,人人摸| 岛国黄| 殴美大黄片| www.zbzhongsen.com| 男人兔费天堂| 欧美日韩免费专区在线| 丁香婷婷激情五月天无毒不卡| 日韩 成人 有码| 蜜桃臀久久| 国产成人五月天丁香花| 欧美亚洲| 精品久久久久久中文字幕三区 | TS人妖另类精品视频系列| 欧美性爽xyxOOOO| 久久五月天婷婷丁香中文字幕| 性色av网站| 狠狠爱综合网| 天天影视激情欧美| 啊灬啊灬啊灬啊灬高潮奶出了免费视| 天天天做天天天爱天天天爽| 91精品国产91熟女| 我要去看2个日本美女.com曹逼| 亚洲国产精品V?在线播放| 亚洲精品天堂久久A∨51成人漫| 日本精品不卡一二三区| 九九九九久久久| 国产白领连续中出在线播放| 少好三P| 亚洲日韩天堂| 丝袜剧情| 97色伦欧美| 日本天天干天天搞一区| 国产精品伦理| 日韩偷拍一区二区三区| 欧美极度丰满熟妇hd| 日本高清电影欧美色图| #NAME?| 97天天操| 26uuu国产成人综合| 爽爽淫人网| 97资源免费视频| 欧美色乱| 丝袜剧情| 亭亭丁香激情| 在线观看啊啊啊啊啊| 亚洲网站一区二区在线| 日韩,欧美,中文在线| 亚洲日韩肥臀视频在线观看| 免费看国产大AB| 天美精品原创av片国产| 熟女人妻一区二区三区| 欧美精品在线观看| 激情文学亚洲| 成全在线观看免费观看| 大香蕉色十月| 国产黑白丝在线| 影视综合无码少妇| 欧美性猛交美女自慰91| 后入日本1234| 天天干天天燥| 偷窥自拍亚洲色图| 超碰97人妻自拍| 天堂中文日本在线观看| 欧美日韩淫加| 天天综合中文字幕 91| 日韩精品亚洲专区在线影视| 久久久婷| 少妇久久久| www.久久99| 天天热精品| 久久久久久一日韩字幕无码| 在线啊啊啊啊| 一二三区精品视频| 日韩免费性爱视频在线观看| 亚洲精品 欧美精品| 久久国产在线一区二区| 少妇超碰在线| 中韩中文字幕在线观看| 性爱乱伦网址| 少妇内射视频| 韩日性爱av| 欧美成人综合| 91精品久久久| 操b网站亚洲无码| 亚洲精品一区二区日本| 日夜啪电影| 亚洲天堂男人天堂网| 色婷婷影视| 偷偷人人精品女女久久| 国产97色在线| 亚洲第一男人天堂| 啪啪啪精品视频| 天堂综合| 丰满人妻一区二区三区大胸懂色| 欧美日韩国产人人| 99国产精品视频尤物| 亚洲视频一二区| 中文字幕,人妻,日韩| 99re69综合| 国产9 9在线 | 亚洲| 日夜久久久九九九久| 午夜福利一区二区影院| 日本 免费 一区二区三区 久久香蕉| 少妇被c 黄 免费观看| 久久精彩视频9| 91久久久亚洲| 青春草莓视频在线观看网址| 久久久98网站免费视频| 91老熟女| 综合干干干av久久久综合网 | 啊啊啊啊好爽好舒服一区二区易域| 婷婷色色五月| 91老熟女| 亚洲熟妇熟在线电影视频| 丁香九月 婷婷| 九一综合网| 亚洲操人| 香蕉99秘 一区精品蜜桃臀| 天天看综合网| 伊人专区一区二区三区| 新视频sss国产| 日本人人操人人操| 99re久久| 免费9 1久久| 中文字幕一区电影在线观看| 国产精品午夜福利| 午夜激情床戏激情| 琪琪精品免费一区二区三区| 人妻大香蕉| 亚洲老熟妇xxx| 欧美综合国产精品久久丁香| 精品一区二区三区四区外站| 国产乱伦一二三区| 性天堂| 香蕉av一区二区三区| www99热| 欧美人人曰人人操人人射射| 久久人体一区二区| 一区二区激情国产熟女| 五月丁香六月综合缴清无码 | 97丝袜亚洲在线播放| 亚洲一区日韩| 久久精品国产亚洲AV清纯| 亚洲黄色网址| 日本三级韩国三级99| 国产福利视频精品视频| 色综九九九一区| 熟妇人妻一区二区三区| 在线看片国产精品每日更新| 9丨久久九九九| 国产成人天堂| 天堂蜜桃无码视频一区二区| 26uuu性物| 亚洲天天更新| 亚洲性猛| 内射日韩大臀美女| 日本道久久综合色色| 国内毛片欧美香蕉精品| 欧美九一精品久久久熟妇| 97综合在线观看| 亚洲中文字母在线播放| 尤物av网站免费在线播放| 少妇熟女视频一二三区| 中文字幕片| 99精品视频在线观看| 亚洲 一区二区 自拍| 午夜小电影在线插入淫高潮| 欧美日韩97在线| 伊人大香蕉在线| 99热啪啪| 亚洲无码AV九九九| 国产女s强制榨精视频| 日韩啪啪视频| 久超碰这里只有精品| 影音先锋一区二区在线资源| 亚洲天天艹| 丁香婷婷久久 | 强奸抽插av| 春色综合网| 蜜桃网熟妇| 精国久久一区二区三区98| 韩国女主播青草福利视频| 亚洲五月婷婷| 啪一啪免费视频| 人人操人人操人人人操| 免费精品无码一级毛片牛牛影视| 中文字幕一二三av| 婷婷九月国产| 中国小夫妻勾搭露脸淫荡对白| 一区二区三区 丝袜 高跟 美腿| 91人妻PORNY九色大屁股| 亚洲av综合色区无码一| 最新亚洲人成网站在线影院| 久久精品一区二区三区四区五区| 青青操在线视频| 久久久久久99999国产精品| 激情小说亚洲图片| 色大香蕉97N| 少妇69中文| 91精品人妻一区二区三区蜜桃臀| 999狠狠综合| 一品道视频一区二区三区| 99精彩视频| 五月天婷婷小说| 五月丁香狠狠爱| 四色永久成人网站| 天天插天天操| a在线观看| 蜜乳av首页| 再深点灬舒服灬太大了好硬好爽| 国语av最新自产拍在线观看| 日本91白丝| 学生妹天天看| 夜夜骑操视频| 老熟妇一区二区三区啪啪| 欧洲精品网| 久久AV色| 碰人碰碰人人开房人肉| 久久华人网| 久久精品国产97欧美精品亚洲 | 蜜桃精品一区二区三区久在线| 老女人老91妇女老热女| 久久伦理视频久久大香蕉视频| 加勒比海成人视频网| 精品少妇人妻| 一区二区无码视频| 天天干18禁| 日韩三级伊人| 国产三级在线现体验区| ..日韩av毛片精品久久久| 亚洲国产成人精品无码专区| 妺妺跟我一起洗澡没忍住| 人妻少妇色综合| 不卡超碰护士AV在线免费播放| 熟女中出视频| 亚洲涩图欧美| 加勒比海人人操超碰在线| 久久九色| 精品久久久久久无码| 久久精品国产亚洲AV无码做| 亚洲无线码一区国产欧美国| 丁香五月天社区| 日韩AV一区二区三区三州三州| 精品美女少妇一区二区三区| 久久人妻一区二区三区高清| 日韩精品午夜操呦呦不卡影院| 欧美91精品国产自产| 午夜福利无毒不卡| 3p国产欧美99热| 亚洲人成色9999精品久久| 欧美 熟女 日韩| 97色欧洲| 亚洲人成网站7777| 操逼操逼逼操操逼91| 色婷婷五月天| 国产传媒一区日韩| 性欧美第一页| 一中国女人毛片水真多| 欧美成人一级免费电影| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 欧美精品庄| 人人干黄色|