Skip to content

OpenCV-OpenCVSharp库

约 238 字小于 1 分钟

NET组件

2024-07-19

  • 选择OpenCvSharp4.windows,这个是将OpenCvSharp4和OpenCvSharp4.runtime.win两个包整合到了一起。

API


Mat img = Cv2.ImRead($@"bop.jpg");//根据路径读取
Mat immm = Cv2.ImDecode();//获取内存图像数据

 Mat grayimg = new Mat();
 Cv2.CvtColor(img, grayimg, ColorConversionCodes.BGR2GRAY);//转灰度图

Mat equ = new Mat();
Cv2.EqualizeHist(grayimg, equ);
//equ.ShowImage("直方均衡");

 Mat binaryimg = new Mat();
 Cv2.Threshold(equ, binaryimg, 95, 255, ThresholdTypes.BinaryInv);
 binaryimg.ShowImage("二值");
 
Mat dilate = new Mat();
Cv2.Dilate(binaryimg, dilate, kernel);
dilate.ShowImage("腐蚀");
Mat erode = new Mat();
Cv2.Erode(dilate, erode, kernel);
erode.ShowImage("膨胀");


//寻找轮廓、绘制轮廓
Scalar[] colors = { new Scalar(255, 0, 0), new Scalar(0, 255, 0), new Scalar(0, 0, 255) };
OpenCvSharp.Point[][] contours;
Cv2.FindContours(erode, out contours, out _, RetrievalModes.External, ContourApproximationModes.ApproxSimple, null);
for (int i = 0; i < contours.Length; i++)
{
    var contour = contours[i];
    if (contour.Length > 1000)
    {
        Cv2.DrawContours(img, new Point[][] { contour }, -1, colors[i % colors.Length], 2, LineTypes.Link8);
        Rect rect = Cv2.BoundingRect(contour);
        Mat roi = new Mat(img, rect);
        roi.ShowImage("ROI");
    }
}







//直方图|归一
Mat hist = new Mat();
Rangef[] rangefss = new Rangef[] { new Rangef(0, 256) };
Cv2.CalcHist(new Mat[] { grayimg }, channels0, new Mat(), hist, 1, histSize, rangefss);//直方
Cv2.Normalize(hist, hist);//归一
float v = hist.Get<float>(index);