EmguCV-基本操作

访问图片

//默认彩色模式打开
            Mat srcImg = CvInvoke.Imread(@"C:\Users\Administrator\Desktop\22.jpg", LoadImageType.Color);

            if (srcImg.IsEmpty)
            {
                Console.WriteLine("文件图片找不到");
                return;
            }

            Console.WriteLine($"图像宽度为:{srcImg.Cols}");//获取图片的列
            Console.WriteLine($"图像高度为:{srcImg.Rows}");//获取图片的行
            Console.WriteLine($"图像通道数为:{srcImg.NumberOfChannels}");//获取图片通道数

            CvInvoke.NamedWindow("srcImg window", NamedWindowType.AutoSize);

            CvInvoke.Imshow("srcImg window", srcImg);

            CvInvoke.CvtColor(srcImg, srcImg, ColorConversion.Bgr2Gray);//转化为灰度图像

            CvInvoke.Imshow("outImg window", srcImg);
            CvInvoke.WaitKey(0);
            CvInvoke.DestroyWindow("srcImg window");//销毁指定窗口
            CvInvoke.DestroyAllWindows();//销毁所有窗口

点、矩形框

Point pt = new Point(100, 100);
            pt.X = 10;
            pt.Y = 20;

            Rectangle rect = new Rectangle();
            rect.X = 10;
            rect.Y = 20;
            rect.Width = 100;
            rect.Height = 200;
            bool bFlg = rect.Contains(new Point(0,0));//判断点是否在矩形框内
            Size size = rect.Size;

            //MCvScalar mCvScalar = new MCvScalar();
            Mat img = new Mat(500,500,DepthType.Cv8U,3);
            img.SetTo(new MCvScalar(0, 0, 0));

            CvInvoke.Line(img, new Point(10, 10), new Point(250, 250), new MCvScalar(0, 255, 0),2,LineType.EightConnected);
            CvInvoke.Circle(img, new Point(250, 250), 100, new MCvScalar(0, 0, 255), 2);
            CvInvoke.Circle(img, new Point(350, 350), 100, new MCvScalar(0, 0, 255), -1);

            CvInvoke.Rectangle(img, new Rectangle(100, 100, 300, 200), new MCvScalar(255, 0, 0), 2);
            CvInvoke.Rectangle(img, new Rectangle(50, 50, 300, 200), new MCvScalar(255, 0, 0), -1);

            //椭圆
            CvInvoke.Ellipse(img, new RotatedRect(new PointF(100, 110), new SizeF(300, 200),0),new MCvScalar(0,255,255),2,LineType.FourConnected);
            CvInvoke.Ellipse(img, new Point(250, 250), new Size(150, 100), 0, 0, 360, new MCvScalar(0, 0, 255), 2);

            CvInvoke.PutText(img, "hello world", new Point(100, 100), FontFace.HersheyComplex, 2, new MCvScalar(255, 255, 0), 5);

            CvInvoke.Imshow("--->", img);
            CvInvoke.WaitKey(0);

访问图像像素

//索引访问
{
    Console.WriteLine("通过索引访问像素值");
    Image<Bgr, Byte> img = new Image<Bgr, byte>(@"C:\Users\Administrator\Desktop\22.jpg");
    for (int i = 0; i < img.Rows; i++)
    {
        for (int j = 0; j < img.Cols; j++)
        {
            if (i==j)
            {
                img[i,j] = new Bgr(0, 0, 255);//把第i行,第j列设置成红色
            }
        }
    }
    CvInvoke.Imshow("Image",img);
    CvInvoke.WaitKey(0);
} 

//Data访问
{
    Console.WriteLine("通过Data索引访问,速度比较快  返回TDepth类型");
    //单通道灰度图像像素访问
    Image<Bgr, Byte> img = new Image<Bgr, byte>(@"C:\Users\Administrator\Desktop\22.jpg");
    for (int i = 0; i < img.Rows; i++)
    {
        for (int j = 0; j < img.Cols; j++)
        {
            if (i == j)
            {
                img.Data[i, j, 0] = 0;//像素值改变赋值(第100行100列 0通道)蓝
                img.Data[i, j, 1] = 255;//像素值改变赋值(第100行100列 0通道)//绿
                img.Data[i, j, 2] = 0;//像素值改变赋值(第100行100列 0通道)//红
                //img[i, j] = new Bgr(0, 0, 255);//把第i行,第j列设置成红色
            }
        }
    }

    CvInvoke.Imshow("Image", img);
    CvInvoke.WaitKey(0);
}

Image类与Mat类的转化

Console.WriteLine("Image类与Mat类的转换");
//Image类转Mat
Image<Bgr, Byte> img = new Image<Bgr, byte>(@"C:\Users\Administrator\Desktop\22.jpg");
Mat matResult = img.Mat;

//Mat转Image类
Mat img2 = CvInvoke.Imread(@"C:\Users\Administrator\Desktop\22.jpg", LoadImageType.Color);
Image<Bgr, Byte> result = img2.ToImage<Bgr, Byte>();

 

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注