gpt4 book ai didi

c++ - 创建您自己的线性滤波器

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:50:25 24 4
gpt4 key购买 nike

我是 Opencv C++ 的新手。我正在尝试将蒙版与图像进行卷积。为此,我想创建自己的蒙版,以便我可以使用 filter2D 数组函数将我的蒙版与图像进行卷积。我要创建的面具是:

char mask [3][3]=  {{-1,0,1},{-1,0,1},{-1,0,1}};

为此我尝试了下面的代码(生成这个掩码):-

Mat kernel(3,3, CV_8UC1, Scalar(-1,0,1)); 

我已将掩码值打印为

std::cout << kernel;

但我得到的答案是 0, 0, 0; 0, 0, 0; 0, 0, 0

我期待的答案是 -1, 0, 1; -1, 0, 1; -1, 0, 1

我知道我在正确编写 channel 时犯了一个错误。任何人都可以帮助我理解 channel (CV_8UC1....)的含义以及如何更正它并获得正确的输出。

最佳答案

CV_8UC1 表示 1 channel ,8 位,uchar 图像。

标量用于设置每个 channel 的值,而不是每个像素/坐标。

示例 1:

Mat kernel(3,3, CV_8UC1, Scalar::all(0)) 

这意味着创建一个包含 0 的 3X3 矩阵,并且由于它是 CV_8UC1 类型,您只能提及一个值,在本例中为 0。

例子 2:

Mat kernel(3,3, CV_8UC3, Scalar(0,0,255)) 

意味着创建一个具有 3 个 channel 的 3X3 矩阵,因为类型是 CV_8UC3 并将 channel 1 设置为 0, channel 2 设置为 0, channel 3 设置为 255。

因此,为了您设置行值的目的,您不能使用标量。而是这样做:

Mat C = (Mat_<double>(3,3) << -1, 0, 1, -1, 0, 1, -1, 0, 1);

检查 this获取更多信息。

希望这对您有所帮助!

关于c++ - 创建您自己的线性滤波器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48661482/

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