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<Vec3b>(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<Vec3b>(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<Mat> 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<Mat> 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();

效果:

相关推荐
强盛小灵通专卖员3 分钟前
DL00291-联邦学习以去中心化锂离子电池健康预测模型完整实现
人工智能·机器学习·深度强化学习·核心期刊·导师·小论文·大论文
Hello123网站12 分钟前
多墨智能-AI一键生成工作文档/流程图/思维导图
人工智能·流程图·ai工具
才思喷涌的小书虫14 分钟前
小白玩转 DINO-X MCP(2):基于 DINO-X MCP 搭建饮食规划工作流
计算机视觉·mcp
有Li44 分钟前
CLIK-Diffusion:用于牙齿矫正的临床知识感知扩散模型|文献速递-深度学习人工智能医疗图像
人工智能·深度学习·文献·医学生
忒可君1 小时前
C# winform FTP功能
开发语言·windows·c#
大唐荣华1 小时前
视觉语言模型(VLA)分类方法体系
人工智能·分类·机器人·具身智能
即兴小索奇1 小时前
AI应用商业化加速落地 2025智能体爆发与端侧创新成增长引擎
人工智能·搜索引擎·ai·商业·ai商业洞察·即兴小索奇
NeilNiu1 小时前
开源AI工具Midscene.js
javascript·人工智能·开源
nju_spy1 小时前
机器学习 - Kaggle项目实践(4)Toxic Comment Classification Challenge 垃圾评论分类问题
人工智能·深度学习·自然语言处理·tf-idf·南京大学·glove词嵌入·双头gru
计算机sci论文精选2 小时前
CVPR 2025 | 具身智能 | HOLODECK:一句话召唤3D世界,智能体的“元宇宙练功房”来了
人工智能·深度学习·机器学习·计算机视觉·机器人·cvpr·具身智能