輪廓的查詢、表達、繪製、特性及匹配 c#版
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> //開始匹配 private void btnStartMatch_Click(object sender, EventArgs e) { //準備輪廓(這裡只比較最外圍的輪廓) Image<Bgr, Byte> image1 = new Image<Bgr, byte>((Bitmap)pbImage1.Image); Image<Bgr, Byte> image2 = new Image<Bgr, byte>((Bitmap)pbImage2.Image); Image<Gray, Byte> imageGray1 = image1.Convert<Gray, Byte>(); Image<Gray, Byte> imageGray2 = image2.Convert<Gray, Byte>(); Image<Gray, Byte> imageThreshold1 = imageGray1.ThresholdBinaryInv(new Gray(128d), new Gray(255d)); Image<Gray, Byte> imageThreshold2 = imageGray2.ThresholdBinaryInv(new Gray(128d), new Gray(255d)); Contour<Point> contour1 = imageThreshold1.FindContours(CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE, RETR_TYPE.CV_RETR_EXTERNAL); Contour<Point> contour2 = imageThreshold2.FindContours(CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE, RETR_TYPE.CV_RETR_EXTERNAL); /*if (contour1.Perimeter / 50 > 2 && contour2.Perimeter / 50 > 2) { contour1 = contour1.ApproxPoly(contour1.Perimeter / 50, 2, new MemStorage()); //對輪廓進行多邊形逼近(引數設為輪廓周長的1/50) contour2 = contour2.ApproxPoly(contour2.Perimeter / 50, 2, new MemStorage()); }*/ //進行匹配 string result = ""; if (rbHuMoments.Checked) result = MatchShapes(contour1, contour2); //Hu矩匹配 else if (rbContourTree.Checked) result = MatchContourTrees(contour1, contour2); //輪廓樹匹配 else if (rbPGH.Checked) result = MatchPghHist(contour1, contour2); //成對幾何直方圖匹配 txtResult.Text += result; } //Hu矩匹配 private string MatchShapes(Contour<Point> contour1, Contour<Point> contour2) { //匹配方法 CONTOURS_MATCH_TYPE matchType = rbHuI1.Checked ? CONTOURS_MATCH_TYPE.CV_CONTOUR_MATCH_I1 : (rbHuI2.Checked ? CONTOURS_MATCH_TYPE.CV_CONTOURS_MATCH_I2 : CONTOURS_MATCH_TYPE.CV_CONTOURS_MATCH_I3); Stopwatch sw = new Stopwatch(); sw.Start(); //匹配 double matchValue = contour1.MatchShapes(contour2, matchType); sw.Stop(); double time = sw.Elapsed.TotalMilliseconds; return string.Format("Hu矩匹配({0:G}),結果:{1:F05},用時:{2:F05}毫秒\r\n", matchType, matchValue, time); } //輪廓樹匹配 private string MatchContourTrees(Contour<Point> contour1, Contour<Point> contour2) { //生成輪廓樹 double thresholdOfCreate = double.Parse(txtThresholdOfCreateContourTrees.Text); //生成輪廓樹的閥值 IntPtr ptrTree1 = CvInvoke.cvCreateContourTree(contour1.Ptr, new MemStorage().Ptr, thresholdOfCreate); IntPtr ptrTree2 = CvInvoke.cvCreateContourTree(contour2.Ptr, new MemStorage().Ptr, thresholdOfCreate); //匹配 double thresholdOfMatch = double.Parse(txtThresholdOfMatchContourTrees.Text); //比較輪廓樹的閥值 Stopwatch sw = new Stopwatch(); sw.Start(); double matchValue = CvInvoke.cvMatchContourTrees(ptrTree1, ptrTree2, MATCH_CONTOUR_TREE_METHOD.CONTOUR_TREES_MATCH_I1, thresholdOfMatch); sw.Stop(); double time = sw.Elapsed.TotalMilliseconds; return string.Format("輪廓樹匹配(生成輪廓樹的閥值:{0},比較輪廓樹的閥值:{1}),結果:{2:F05},用時:{3:F05}毫秒\r\n", thresholdOfCreate, thresholdOfMatch, matchValue, time); } //成對幾何直方圖匹配 private string MatchPghHist(Contour<Point> contour1, Contour<Point> contour2) { //生成成對幾何直方圖 Rectangle rect1 = contour1.BoundingRectangle; float maxDist1 = (float)Math.Sqrt(rect1.Width * rect1.Width + rect1.Height * rect1.Height); //輪廓的最大距離:這裡使用輪廓矩形邊界框的對角線長度 int[] bins1 = new int[] { 60, 20 }; RangeF[] ranges1 = new RangeF[] { new RangeF(0f, 180f), new RangeF(0f, maxDist1) }; //直方圖第0維為角度,範圍在(0,180),第2維為輪廓兩條邊緣線段的距離 DenseHistogram hist1 = new DenseHistogram(bins1, ranges1); CvInvoke.cvCalcPGH(contour1.Ptr, hist1.Ptr); Rectangle rect2 = contour2.BoundingRectangle; float maxDist2 = (float)Math.Sqrt(rect2.Width * rect2.Width + rect2.Height * rect2.Height); int[] bins2 = new int[] { 60, 20 }; RangeF[] ranges2 = new RangeF[] { new RangeF(0f, 180f), new RangeF(0f, maxDist2) }; DenseHistogram hist2 = new DenseHistogram(bins2, ranges2); CvInvoke.cvCalcPGH(contour2.Ptr, hist2.Ptr); //匹配 Stopwatch sw = new Stopwatch(); sw.Start(); double compareResult; HISTOGRAM_COMP_METHOD compareMethod = rbHistCorrel.Checked ? HISTOGRAM_COMP_METHOD.CV_COMP_CORREL : (rbHistChisqr.Checked ? HISTOGRAM_COMP_METHOD.CV_COMP_CHISQR : (rbHistIntersect.Checked ? HISTOGRAM_COMP_METHOD.CV_COMP_INTERSECT : HISTOGRAM_COMP_METHOD.CV_COMP_BHATTACHARYYA)); if (rbHistEmd.Checked) { //EMD //將直方圖轉換成矩陣 Matrix<Single> matrix1 = FormProcessHist.ConvertDenseHistogramToMatrix(hist1); Matrix<Single> matrix2 = FormProcessHist.ConvertDenseHistogramToMatrix(hist2); compareResult = CvInvoke.cvCalcEMD2(matrix1.Ptr, matrix2.Ptr, DIST_TYPE.CV_DIST_L2, null, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero); matrix1.Dispose(); matrix2.Dispose(); } else { //直方圖對比方式 hist1.Normalize(1d); hist2.Normalize(1d); compareResult = CvInvoke.cvCompareHist(hist1.Ptr, hist2.Ptr, compareMethod); } sw.Stop(); double time = sw.Elapsed.TotalMilliseconds; return string.Format("成對幾何直方圖匹配(匹配方式:{0}),結果:{1:F05},用時:{2:F05}毫秒\r\n", rbHistEmd.Checked ? "EMD" : compareMethod.ToString("G"), compareResult, time); }
相關推薦
輪廓的查詢、表達、繪製、特性及匹配 c#版
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> //開始匹配 private void btnSta
Java、C、C++、C#、php、python語言的內在特性及應用
當你選擇了網際網路這個行業也就意味著你要終身學習,想必現在的你一定驚歎網際網路的發展速度吧! 網際網路行業不比傳統行業,不是說你精通一門手藝就可以一輩子靠這個手藝來養活自己,網際網路行業沒有這回事,如果你想問有沒有哪一門語言學完之後可以養活自己一輩子,那麼抱歉,我想沒人能回答你。 網際網路發
第五章 繪圖基礎 (GDI、裝置環境、點線繪製、填充)
光柵裝置 raster device 向量裝置 vector device 對映模式 mapping 轉換 transform 圖元檔案 metafile 區域region 路徑 path 剪裁 clipping 調色盤 palettes 列印 print
SQL server 查詢出現:---“子查詢返回的值不止一個。當子查詢跟隨在 =、!=、<、<=、>、>= 之後,或子查詢用作表達式時,這種情況是不允許的。”SQL查詢錯誤解析---
gui 允許 select 查詢語句 一對一 行數 style sql 之前 最近用select進行數據篩選,碰到下面的這個錯誤: ---子查詢返回的值不止一個。當子查詢跟隨在 =、!=、<、<=、>、>= 之後,或子查詢用作表達式時,這種情況是不
【JAVAEE學習筆記】hibernate02:實體規則、對象狀態、緩存、事務、批量查詢和實現客戶列表顯示
使用 ins tro trace ges create 綁定 criteria 命名 一、hibernate中的實體規則 實體類創建的註意事項 1.持久化類提供無參數構造 2.成員變量私有,提供共有get/set方法訪問.需提供屬性 3.持久化類中的屬性,應盡量使用包
mysql查詢今天、昨天、近7天、近30天、本月、上一月的SQL語句
時間 中比 code mat 信息 where 從大到小 案例 rdate mysql查詢今天、昨天、近7天、近30天、本月、上一月的SQL語句 這篇文章主要介紹了mysql查詢今天、昨天、近7天、近30天、本月、上一月的SQL語句,一般在一些統計報表中比較常用這個時間段,
Day9:yield的表達式形式、面向過程編程(grep -rl 'root' /etc)
ear blog break 裝飾 sea end col 位置 append 一.yield的表達式 def foo(): print(‘starting‘) while True: x=yield None#return 2
yield的表達式形式、面向過程編程(grep -rl 'root' /etc)
pycha app spa 絕對路徑 文件的 printer earch 判斷 裝飾器 一、yield的表達形式 def foo(): print(‘starting‘) while True: x=yield None#return 2
python基礎之生成器表達式形式、面向過程編程、內置函數部分
[] remove curd fsp mar send 最大限度 rabl ret 生成器表達式形式 直接上代碼 1 # yield的表達式形式 2 def foo(): 3 print(‘starting‘) 4 while True: 5
可選參數、命名參數、.NET的特殊類型、特性
應用 傳輸 問題 運行 read company ria 隱式類型 dynamic 1、可選參數和命名參數 1.1可選參數 語法: [修飾符] 返回類型 方法名(必選參數n,可選參數n) 註意:
MYSQL查詢今天、昨天、7天前、30天、本月數據
form mysq sql _for interval 時間 for days to_days 今天: SELECT * FROM 表名 WHERE TO_DAYS( 時間字段名) = TO_DAYS(NOW()); 昨天: SELECT * FROM 表名 WHERE T
JavaScript學習總結(三、函數聲明和表達式、this、閉包和引用、arguments對象、函數間傳遞參數)
rem [1] incr foo i++ scrip erro ren 推薦 一、函數聲明和表達式 函數聲明: function test() {}; test(); //運行正常 function test() {}; 函數表達式: var test = fun
javascript語句——表達式語句、塊語句、空語句和聲明語句
產生 nbsp 之間 turn 指南 console 原來 塊級作用域 r++ 前面的話 如果表達式在javascript中是短語,那麽語句(statement)就是javascript整句或命令。表達式計算出一個值,語句用來執行以使某件事發生。javascript程序
SQL語句來查詢今天、昨天、7天內、30天的數據,經典!
diff 指定 first 內容 輸出 har edi time nth ---恢復內容開始--- 今天的所有數據:select * from 表名 where DateDiff(dd,datetime類型字段,getdate())=0 昨天的所有數據:select *
Tingq 模糊查詢 共多少條數據 最大、小、平均、求和值 升、降序
string sys post nat sender type asp idt acl 頁面代碼 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="
【javascript】正則表達式match、exec和test的使用
p s 下標 mat http [0 使用 regex es2017 false 正則表達式match、exec和test的使用 match和exec在匹配成功時返回的都是數組,在沒有匹配上時返回的都是null;test在匹配成功是返回true,在沒有匹配時返回的是fals
Day4 閉包、裝飾器decorator、叠代器與生成器、面向過程編程、三元表達式、列表解析與生成器表達式、序列化與反序列化
反序 bsp pic nbsp tor 序列 space 列表解析 列表 http://pic.cnhubei.com/space.php?uid=1774&do=album&id=1362489http://pic.cnhubei.com/space.ph
【書中示例】--《C程序設計語言》第二章:類型、運算符、表達式
類型 tar c程序設計 http 第二章 dtb wix gyp ng2 8azxgp景劫鋼槍勞趴http://tushu.docin.com/sina_636267481113rl5i職旱諛劑興勞http://www.docin.com/krm61755owd5q改坡拖
什麽是事務、事務特性、事務隔離級別、spring事務傳播特性
ons pri table 產生 serializa support enc 不一致 修改 1.什麽是事務: 事務是程序中一系列嚴密的操作,所有操作執行必須成功完成,否則在每個操作所做的更改將會被撤銷,這也是事務的原子性(要麽成功,要麽失敗)。 2.事務特性: 事務特性分為
Mysql數據庫四大特性、事物的四個隔離、基本MySQL語句、獨立表空間
mysql數據庫四大特性、事物的四個隔離、基本mysql語句、獨立表空間Mysql數據庫四大特性、事物的四個隔離、基本MySQL語句、獨立表空間 本人學習mysql的時候感覺筆記有點散所以自己做了一個整合,而且有些概念介紹的太官方了,所以自己根據理解總結了一下。(有不對的請指點!) mysql:sql:關系型