Emgu WPF學習使用 Rectangle識別

2021-09-07 19:35:01 字數 3033 閱讀 6988

原文:

emgu-wpf學習使用-rectangle識別

環境:win8 64位 vs2015

emgu 版本:emgucv-windesktop 3.2.0.2682

示例圖上部流程:原圖->灰度化->截斷閾值化->中值模糊->高斯模糊->膨脹->腐蝕->ostu二值化。

// 灰度化

imageimggray = new image(imgsrc.size);

cvinvoke.cvtcolor(imgsrc, imggray, colorconversion.bgr2gray);

//截斷閾值化

imageimgthresholdtrunc = new image(imggray.size);

cvinvoke.threshold(imggray, imgthresholdtrunc, 60, 255, thresholdtype.trunc);

// 中值模糊

imageimgmedian = imgthresholdtrunc.smoothmedian(7); //使用5*5的卷積核

// 高斯模糊

imageimggaussian = imgmedian.smoothgaussian(5);

// 膨脹,消除雜點

mat omat2 = cvinvoke.getstructuringelement(emgu.cv.cvenum.elementshape.rectangle,

new system.drawing.size(5, 5), new system.drawing.point(0, 0));

imageimgerode = new image(imggray.size);

cvinvoke.erode(imggaussian, imgerode, omat2, new system.drawing.point(0, 0), 4,

bordertype.default, new mcvscalar(255, 0, 0, 255));

// 腐蝕,消除雜點

imageimgdilate = new image(imggray.size);

cvinvoke.dilate(imgerode, imgdilate, omat2, new system.drawing.point(0, 0), 4,

bordertype.default, new mcvscalar(255, 0, 0, 255));

// otsu二值化

imageimgthresholdotsu = new image(imggray.size);

cvinvoke.threshold(imgdilate, imgthresholdotsu, 0, 255, thresholdtype.otsu);

示例圖下部流程:原圖->灰度化->截斷閾值化->消除裂縫->ostu二值化->識別contours->繪製contours.

// 灰度化

imageimggray = new image(imgsrc.size);

cvinvoke.cvtcolor(imgsrc, imggray, colorconversion.bgr2gray);

//截斷閾值化

imageimgthresholdtrunc = new image(imggray.size);

cvinvoke.threshold(imggray, imgthresholdtrunc, 60, 255, thresholdtype.trunc);

// 消除裂縫

mat omat1 = cvinvoke.getstructuringelement(emgu.cv.cvenum.elementshape.rectangle,

new system.drawing.size(6, 6), new system.drawing.point(0, 0));

imageimgmorphologyex = new image(imggray.size);

cvinvoke.morphologyex(imgthresholdtrunc, imgmorphologyex, emgu.cv.cvenum.morphop.close, omat1,

new system.drawing.point(0, 0), 1, bordertype.default,

new mcvscalar(255, 0, 0, 255));

// otsu二值化

imageimgthresholdotsu = new image(imggray.size);

cvinvoke.threshold(imgmorphologyex, imgthresholdotsu, 0, 255, thresholdtype.otsu);

listboxlist = new list(); //a box is a rotated rectangle

vectorofvectorofpoint contours = new vectorofvectorofpoint();

cvinvoke.findcontours(imgthresholdotsu, contours, null, retrtype.list,

imageimgresult = new image(imggray.size);

cvinvoke.cvtcolor(imgthresholdotsu, imgresult, colorconversion.gray2bgr);

mcvscalar oscaler = new mcvscalar(40, 255, 255, 255);

int count = contours.size;

for (int i = 0; i < count; i++)

}#endregion

if (isrectangle)

cvinvoke.drawcontours(imgresult, contours, i, oscaler, 3);}}

}}

MySQL使用學習使用 mysql學習使用

1 mysql學習 1 安裝 ubuntu下直接安裝 apt get install mysql server 2 檢查伺服器是否啟動 sudo netstat tap grep mysql,如果啟動成功,出現以下資訊 tcp00localhost.localdomain mysql listen ...

學習使用CSDN markdown使用

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...

學習使用PIVOT

假設有這樣的乙個需求 有乙個表中儲存了某個部門的各個員工的每一年的各類薪金,記錄儲存格式如 員工姓名 薪金數目 薪金種類 年份 現在要求根據員工的姓名進行查詢,查詢出某些員工各個年份的薪金總數,出來的結果要求 columnname 年份 員工1姓名 員工2姓名 columnvalue 年份 薪金總數...