gpt4 book ai didi

c++ - Opencv 使用 cv::Mat 创建新图像

转载 作者:IT老高 更新时间:2023-10-28 23:11:06 26 4
gpt4 key购买 nike

我是 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);

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

我从 Opencv 站点 (opencv.pdf,opencv2refman.pdf) 和 Oreilly 的 Opencv 书籍中搜索 Documentaion。但找不到解释的答案。

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

最佳答案

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

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

您可以使用 cv::Mat:

创建图像
Mat grHistogram(260, 301, CV_8UC3, Scalar(0, 0, 0));

8U表示8U有符号整数,C3表示3 CRGB 颜色 channel ,Scalar(0, 0, 0) 是每个像素的初始值。同样,

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

就是在grHistogram上从pt1点到pt2点画一条线。线条颜色为白色(255、255、255),1像素粗细,8连线,0位移。

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

回到你的问题,

Why this happening since, both create a Mat image structure?

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

What is the purpose of const cv:Scalar &_s ?

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

关于c++ - Opencv 使用 cv::Mat 创建新图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28780947/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com