• OpenCvSharp从入门到实践-(06)创建图像


    目录

    1、创建图像

    1.1实例1-创建黑色图像

    1.2实例2-创建白色图像

    1.3实例3-创建随机像素的雪花点图像

    2、图像拼接

    2.1水平拼接图像

    2.2垂直拼接图像

    2.3实例4-垂直和水平两种方式拼接两张图像


    在OpenCV中,黑白图像其实就是一个二维数组,彩色图像就是一个三位数组。数组中的每个元素就是图像中对应位置的像素值。

    1、创建图像

    在黑白图像中,像素值为0表示纯黑色,像素值为255表示纯白色

    1.1实例1-创建黑色图像

    创建一个100行、200列(即宽200、高100)的黑色图像,代码如下:

    int width = 200;
    int height = 100;
    Mat img = Mat.Zeros(height, width, MatType.CV_8UC1);
    Cv2.ImShow("img", img);
    Cv2.WaitKey();
    Cv2.DestroyAllWindows();

    效果

    方式二,效果同上,代码如下:

    int width = 200;
    int height = 100;
    int[] array = new int[200 * 100];
    Mat img = new Mat(height, width, MatType.CV_8UC1, array);
    Cv2.ImShow("img", img);
    Cv2.WaitKey();
    Cv2.DestroyAllWindows();

    1.2实例2-创建白色图像

    创建白色图像有多种方式:

    第一种:利用Mat构造函数直接创建;

    第二种:利用Mat.Ones方法创建一个像素值为1的图像,然后将图像中所有像素值乘以255;

    第三种:创建一个所有值都为255的数组,利用数组创建图像;

    第四种:利用SetTo方法;

    第一种代码如下:

    int width = 200;
    int height = 100;
    Mat img = new Mat(new Size(width, height), MatType.CV_8UC1, Scalar.White);
    Cv2.ImShow("img", img);
    Cv2.WaitKey();
    Cv2.DestroyAllWindows();

    第二种代码如下:

    int width = 200;
    int height = 100;
    Mat img = Mat.Ones(height, width, MatType.CV_8UC1) * 255;
    Cv2.ImShow("img", img);
    Cv2.WaitKey();
    Cv2.DestroyAllWindows();

    第三种代码如下:

    int width = 200;
    int height = 100;
    byte[] array = new byte[width* height]; // 定义了长度为width* height的数组
    for (int i = 0; i < array.Length; i++)
    {
        array[i] = 255; // 将每个元素赋值为255
    }
    Mat img = new Mat(height, width, MatType.CV_8UC1, array);
    Cv2.ImShow("img", img);
    Cv2.WaitKey();
    Cv2.DestroyAllWindows();

    第四种代码如下:

    int width = 200;
    int height = 100;
    Mat img = new Mat(new Size(width, height), MatType.CV_8UC1);
    img.SetTo(new Scalar(255, 255, 255)); // 将背景设置为白色
    Cv2.ImShow("img", img);
    Cv2.WaitKey();
    Cv2.DestroyAllWindows();

    效果:

    1.3实例3-创建随机像素的雪花点图像

    代码如下:

    int width = 200;
    int height = 100;
    Mat img = new Mat(height, width, MatType.CV_8UC1);
    Random random = new Random();
    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            byte blue = (byte)(random.NextDouble() * 256);
            byte green = (byte)(random.NextDouble() * 256);
            byte red = (byte)(random.NextDouble() * 256);
            Vec3b color = new Vec3b((byte)blue, (byte)green, (byte)red);
            img.At(i, j) = color;
        }
    }
    Cv2.ImShow("img", img);
    Cv2.WaitKey();
    Cv2.DestroyAllWindows(); 

    效果:

     

    改变一行代码,创建彩色的随机图像,代码如下:

    int width = 200;
    int height = 100;
    Mat img = new Mat(height, width, MatType.CV_8UC3);
    Random random = new Random();
    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            byte blue = (byte)(random.NextDouble() * 256);
            byte green = (byte)(random.NextDouble() * 256);
            byte red = (byte)(random.NextDouble() * 256);
            Vec3b color = new Vec3b((byte)blue, (byte)green, (byte)red);
            img.At(i, j) = color;
        }
    }
    Cv2.ImShow("img", img);
    Cv2.WaitKey();
    Cv2.DestroyAllWindows(); 

    效果:

     

    2、图像拼接

    OpenCvSharp中提供Cv2.HConcat、Cv2.VConcat方法实现图像拼接。

    2.1水平拼接图像

    Cv2.HConcat方法可以对图像进行水平拼接(或者叫横向拼接),其函数如下:

    public static void HConcat(IEnumerable src, OutputArray dst)

    说明:

    摘要:
        Applies horizontal concatenation to given matrices.

    参数:
      src:
        input array or vector of matrices. all of the matrices must have the same number
        of rows and the same depth.

      dst:
        output array. It has the same number of rows and depth as the src, and the sum
        of cols of the src.

    2.2垂直拼接图像

    Cv2.VConcat可以对图像进行垂直拼接(或者叫纵向拼接),其函数如下:

    public static void VConcat(IEnumerable src, OutputArray dst)

    说明:

    摘要:
        Applies vertical concatenation to given matrices.

    参数:
      src:
        input array or vector of matrices. all of the matrices must have the same number
        of cols and the same depth.

      dst:
        output array. It has the same number of cols and depth as the src, and the sum
        of rows of the src.

    2.3实例4-垂直和水平两种方式拼接两张图像

    代码如下:

    Mat mat = Cv2.ImRead("test01.jpg");
    Cv2.ImShow("src", mat);

    Mat dst = new Mat();
    Cv2.VConcat(new Mat[] { mat, mat }, dst);
    Cv2.ImShow("img_v", dst);

    Cv2.HConcat(new Mat[] { mat, mat }, dst);
    Cv2.ImShow("img_h", dst);

    Cv2.WaitKey();
    Cv2.DestroyAllWindows();

    效果:

  • 相关阅读:
    Unity开发——XLua热更新之Hotfix配置(包含xlua获取与导入)
    力扣336.回文对 ——字符串哈希
    5.21.1.1 Set Feature Command - Arbitration
    合宙Air724UG LuatOS-Air LVGL API控件-键盘 (Keyboard)
    CF1648B Integral Array
    《一个程序猿的生命周期》-《发展篇》- 45.“崩”在熬过疫情后的第一年
    Day37-Http、Maven
    计算机毕业设计Python+djang的疫情防控下医院人员调动系统(源码+系统+mysql数据库+Lw文档)
    JAVA 从入门到起飞 day8 面向对象01
    一文教你如何在项目开发中使用日志
  • 原文地址:https://blog.csdn.net/lw112190/article/details/134704200