影像讀取為Bgr格式
var filePath = "D:\\test\\test.png";
Image<Bgr, Byte> imgOri = new Image<Bgr, Byte>(filePath);
影像讀取為Mat格式
Mat imgMat = CvInvoke.Imread(filePath);
新增Mat格式
Mat imgNewMat = new Mat();
Bgr轉HSV格式
Image<Hsv, byte> imgHsv = new Image<Hsv, byte>(imgOri .Size);
CvInvoke.CvtColor(imgOri , imgHsv , Emgu.CV.CvEnum.ColorConversion.Bgr2Hsv);
影像過濾 -> 輸出為Mask
Mat imgRange = new Mat(imgHsv.Size, DepthType.Cv8U, 3);
CvInvoke.InRange(imgHsv, new ScalarArray(new MCvScalar(40, 20, 50)), new ScalarArray(new MCvScalar(60, 255, 100)), imgRange);
透過Mask取得輪廓重新上色
VectorOfMat contours = new VectorOfMat();
CvInvoke.FindContours(imgRange, contours, null, Emgu.CV.CvEnum.RetrType.External, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxNone);
CvInvoke.DrawContours(imgMat, contours, -6, new MCvScalar(255), -1);
透過輪廓增加外框
CvInvoke.DrawContours(imgMat, contours, -1, new MCvScalar(0, 0, 255));
顯示Mask的區塊
Mat imgOutput = new Mat(imgOri.Size, DepthType.Cv8U, 3);
imgMat.CopyTo(imgOutput, imgRange);
影像拆成3個Channel
Image格式
Image<Gray, Byte>[] imgHsvs = imgHsv.Split();
var imgHsvH = imgHsvs[0];
var imgHsvS = imgHsvs[1];
var imgHsvV = imgHsvs[2];
Mat格式
vectorOfMat vm = new VectorOfMat();
CvInvoke.Split(matImg,vm);
var vms = vm.GetInputOutputArray();
var vmsH=vms.GetMat(0);
var vmsH=vms.GetMat(1);
var vmsH=vms.GetMat(2);
取得ROI區域
Mat imgROI = new Mat(img1.Mat, new Range(0,100), new Range(0, 100));
->
邊緣檢測
Mat imgCanny = new Mat();
CvInvoke.Canny(imgOri, imgCanny, 50, 150);
尋找輪廓並加上框線
CvInvoke.FindContours(imgCanny, contours, null, RetrType.External, ChainApproxMethod.ChainApproxSimple);
CvInvoke.DrawContours(imgMat, contours, -1, new MCvScalar(0, 0, 255));
對單一輪廓加框
VectorOfPoint contour = contours[0];
Rectangle box = CvInvoke.BoundingRectangle(contour);
CvInvoke.Rectangle(imgMat, box, new MCvScalar(0, 0, 255, 255), 3);
從輪廓產生矩形擷取局部
Rectangle box = CvInvoke.BoundingRectangle(contour);
Mat imgROI1 = new Mat(imgOri.Mat, box);
邊緣檢測
圖像旋轉
var center = new PointF(imgWidth / 2, imgHeight / 2);
Matrix<float> mapMatrix = new Matrix<float>(2, 3);
CvInvoke.GetRotationMatrix2D(center, 45, 1.0, mapMatrix);
Mat imgRotate = new Mat();
CvInvoke.WarpAffine(imgOri, imgRotate, mapMatrix, new Size(imgWidth, imgHeight), Inter.Nearest, Warp.Default, BorderType.Transparent, new MCvScalar(0d));
圖像平移
Matrix<float> mapMatrix = new Matrix<float>(2, 3);
mapMatrix.Data[0, 0] = 1;
mapMatrix.Data[0, 1] = 0;
mapMatrix.Data[0, 2] = 5;//left
mapMatrix.Data[1, 0] = 0;
mapMatrix.Data[1, 1] = 1;
mapMatrix.Data[1, 2] = 10;//top
Mat imgTransfer = new Mat();
CvInvoke.WarpAffine(imgOri, imgTransfer, mapMatrix, imgOri.Size, Inter.Nearest, Warp.Default, BorderType.Transparent, new MCvScalar(255));
留言列表