以下程序也与以前的程序非常相似。唯一的区别是该程序创建一个空白图像,而不是从文件加载现有图像。
将上述简单代码片段复制并粘贴到 IDE 中并运行它。然后,您应该会看到如下图所示的输出。
代码语言:javascript复制#include <iostream>
#include <opencv2opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat image(200, 300, CV_8UC3, Scalar(200, 31, 120));
// 定义一个窗体的名称
String winName = "blank Image Window";
// 创建一个窗体用于显示图像
namedWindow(winName);
// 把图像显示到创建窗体上面
imshow(winName, image);
// 等待输入字符并关闭窗口
waitKey(0);
destroyWindow(winName);
本节中新增的 OpenCV 函数说明
代码语言:javascript复制Mat image(600, 800, CV_8UC3, Scalar(100, 250, 30));
这是 Mat 类中可用的众多构造函数之一。它创建一个高 600 像素、宽 800 像素的图像。为图像中的每个像素分配 24 位。24 位将由三个无符号 8 位整数组成,分别代表蓝色、绿色和红色平面。三个整数的值应介于 0 到 255 之间。
然后,此构造函数使用 3 个无符号整数(100、250、30)初始化创建图像的每个像素。因此,它初始化蓝色通道为 100,绿色通道初始化为 250,红色通道初始化为 30。由于绿色通道的值明显大于其他通道的值,因此输出图像为绿色。您可以尝试这三个值的不同组合并查看输出图像。
Mat:**:Mat(int rows, int cols, int type, const Scalar& s)** 此构造函数将创建一个具有指定行数和列数的 Mat 对象,并使用 s 中给出的值初始化每个元素。
- row - 2D 数组中的行数(即 - 图像的高度(以像素为单位)
- cols - 2D 数组中的列数(即 - 图像的宽度(以像素为单位)
- type - 二维数组的数据类型,指定每个通道中每个元素的深度和数据类型以及通道数。(当然,如果通道数大于 2,则 1D 数组变为 2D 数组)。
- CV_8UC1
- CV_8UC2
- CV_8UC3
- CV_8UC4
- CV_8UC(n)
- CV_8SC1
- CV_8SC2
- CV_8SC3
- CV_8SC4
- CV_8SC(n)
- CV_16UC1
- CV_16UC2
- CV_16UC3
- CV_16UC4
- CV_16UC(n)
- CV_16SC1
- CV_16SC2
- CV_16SC3
- CV_16SC4
- CV_16SC(n)
- CV_32SC1
- CV_32SC2
- CV_32SC3
- CV_32SC4
- CV_32SC(n)
- CV_32FC1
- CV_32FC2
- CV_32FC3
- CV_32FC4
- CV_32FC(n)
- CV_64FC1
- CV_64FC2
- CV_64FC3
- CV_64FC4
- CV_64FC(n)
- s - 使用 s 为每个通道给出的值初始化每个数组元素(像素)。
【小结】
万丈高楼平地起,接触任何技术栈,都先把基础过一遍。