Opencv使用cv::Mat创建新图像

Opencv create new image using cv::Mat

本文关键字:图像 新图像 创建 使用 cv Mat Opencv      更新时间:2023-10-16

我是opencv的新手,正在尝试一些示例代码。

在一个代码中,Mat gr(row1,col1,CV_8UC1,scalar(0)); int x = gr.at<uchar> (row,col);

在另一个例子中,

Mat grHistrogram(301,260,CV_8UC1,Scalar(0,0,0));
line(grHistrogram,pt1,pt2,Scalar(255,255,255),1,8,0);

现在我的问题是,如果我在第二段代码中使用标量(0)而不是标量(0,0,0),那么代码就不起作用了。1.为什么会发生这种情况,因为两者都创建了一个Mat图像结构。2.constcv:Scalar&amp_s.

我从Opencv网站(Opencv.pdf,opencv2refman.pdf)和Oreilly的Opencv书中搜索文档。但找不到一个解释性的答案。

我想我使用的是Mat(int _rows,int _cols,int _type,const cv:Scalar&_s)结构。

首先,您需要以下信息来创建图像:

  1. 宽度:301像素
  2. 高度:260像素
  3. 每个像素值(强度)为0~255:一个8位无符号整数
  4. 支持所有RGB颜色:3个通道
  5. 初始颜色:黑色=(B,G,R)=(0,0,0)

您可以使用cv::Mat:创建图像

Mat grHistogram(260, 301, CV_8UC3, Scalar(0, 0, 0));

8U表示8U有符号整数,C3表示RGB颜色的3个C通道,Scalar(0, 0, 0)是每个像素的初始值。类似地,

line(grHistrogram,pt1,pt2,Scalar(255,255,255),1,8,0);

是在CCD_ 6上从点CCD_ 7到点CCD_。线的颜色为白色(255255255),具有1像素厚度、8连接线和0偏移。

有时您不需要RGB彩色图像,而是需要一个简单的灰度图像。也就是说,使用一个通道而不是三个。类型可以更改为CV_8UC1,并且只需要指定一个通道的强度,例如Scalar(0)

回到你的问题,

为什么会发生这种情况,因为两者都创建了Mat图像结构?

因为您需要指定Mat的类型。是彩色图像CV_8UC3还是灰度图像CV_8UC1?它们是不同的。如果在CV_8UC3映像上使用Scalar(255),则程序可能无法正常工作。

constcv:Scalar&amp_s

CCD_ 16用于指定每个像素的强度值。例如,如果类型为CV_8UC3,则Scalar(255, 0, 0)为蓝色,而Scalar(0, 0, 0)为黑色。或者,如果是CV_8UC1灰度图像,则Scalar(0)为黑色。避免将它们混合在一起。

您可以创建单通道图像或多通道图像。

创建单通道图像:Mat img(500, 1000, CV_8UC1, Scalar(70));

创建多通道图像:Mat img1(500, 1000, CV_8UC3, Scalar(10, 100, 150));

您可以在下面的页面中看到更多的示例和详细信息。https://progtpoint.blogspot.com/2017/01/tutorial-3-create-image.html