影像讀取為Bgr格式

var filePath = "D:\\test\\test.png";
Image<Bgr, Byte> imgOri = new Image<Bgr, Byte>(filePath);

image

 

   影像讀取為Mat格式

Mat imgMat = CvInvoke.Imread(filePath);

image

 

   新增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);

image

 

   影像過濾 -> 輸出為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);

image

 

 透過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);

image

 

 透過輪廓增加外框

CvInvoke.DrawContours(imgMat, contours, -1, new MCvScalar(0, 0, 255));

image

 

image

   顯示Mask的區塊

Mat imgOutput = new Mat(imgOri.Size, DepthType.Cv8U, 3);

imgMat.CopyTo(imgOutput, imgRange);

image

 

   影像拆成3個Channel

 Image格式

Image<Gray, Byte>[] imgHsvs = imgHsv.Split();

var imgHsvH = imgHsvs[0];
var imgHsvS = imgHsvs[1];
var imgHsvV = imgHsvs[2];

imageimageimage

 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));

image->image

 

 邊緣檢測

image

Mat imgCanny = new Mat();
CvInvoke.Canny(imgOri, imgCanny, 50, 150);

image

 尋找輪廓並加上框線

CvInvoke.FindContours(imgCanny, contours, null, RetrType.External, ChainApproxMethod.ChainApproxSimple);

CvInvoke.DrawContours(imgMat, contours, -1, new MCvScalar(0, 0, 255));

image

 對單一輪廓加框

VectorOfPoint contour = contours[0];
Rectangle box = CvInvoke.BoundingRectangle(contour);
CvInvoke.Rectangle(imgMat, box, new MCvScalar(0, 0, 255, 255), 3);

image

 從輪廓產生矩形擷取局部

Rectangle box = CvInvoke.BoundingRectangle(contour);
Mat imgROI1 = new Mat(imgOri.Mat, box);

image

 邊緣檢測

 

 圖像旋轉

image
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));

 圖像平移

image

 

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));

 

 

arrow
arrow
    全站熱搜

    門外漢 發表在 痞客邦 留言(0) 人氣()