使用OpenCV的Sobel运算计算图像梯度方向

2023-12-28

我正在尝试使用 OpenCV 的 Sobel 方法的结果来确定图像梯度方向。

我知道这应该是一个非常简单的任务,我想我理解这个理论,但实现它比我想象的更具挑战性。

我希望渐变方向在 0-360 度之间,但我的代码显示所有渐变都在 180 - 270 度之间。

我提交了此代码的先前版本,其中包括整数除法问题。我已经修复了这个问题,但它并没有解决方向角受限的问题。

我已经单步执行了所有代码,但我就是看不出哪里出错了?有人能发现我的错误吗?

Thanks.

void getGradients(IplImage* original, cv::Mat* gradArray)
{
cv::Mat original_Mat(original, true);

// Convert it to gray
cv::cvtColor( original_Mat, original_Mat, CV_RGB2GRAY );
//cv::blur(original_Mat, original_Mat, cv::Size(7,7));

/// Generate grad_x and grad_y
cv::Mat grad_x = cv::Mat::zeros(original->height, original->width, CV_16S); 
cv::Mat grad_y = cv::Mat::zeros(original->height, original->width, CV_16S);

/// Gradient X
cv::Sobel(original_Mat, grad_x, CV_16S, 1, 0, 3);

/// Gradient Y
cv::Sobel(original_Mat, grad_y, CV_16S, 0, 1, 3);

uchar* pixelX = grad_x.data;
uchar* pixelY = grad_y.data;
uchar* grad1 = gradArray[0].data;
uchar* grad2 = gradArray[1].data;
uchar* grad3 = gradArray[2].data;
uchar* grad4 = gradArray[3].data;
uchar* grad5 = gradArray[4].data;
uchar* grad6 = gradArray[5].data;
uchar* grad7 = gradArray[6].data;
uchar* grad8 = gradArray[7].data;
int count = 0;
int min = 999999;
int max = -1;

for(int i = 0; i < grad_x.rows * grad_x.cols; i++) 
{
        double directionRAD = atan2(pixelY[i], pixelX[i]);
        int directionDEG = (int)(180 + directionRAD / M_PI * 180);

        if(directionDEG < min){min = directionDEG;}
        if(directionDEG > max){max = directionDEG;}

        if(directionDEG >= 0 && directionDEG <= 45)         { grad1[i] = 255; count++;}         
        if(directionDEG >= 45 && directionDEG <= 90)        { grad2[i] = 255; count++;}         
        if(directionDEG >= 90 && directionDEG <= 135)       { grad3[i] = 255; count++;}         
        if(directionDEG >= 135 && directionDEG <= 190)      { grad4[i] = 255; count++;}         
        if(directionDEG >= 190 && directionDEG <= 225)      { grad5[i] = 255; count++;}         
        if(directionDEG >= 225 && directionDEG <= 270)      { grad6[i] = 255; count++;}     
        if(directionDEG >= 270 && directionDEG <= 315)      { grad7[i] = 255; count++;}
        if(directionDEG >= 315 && directionDEG <= 360)      { grad8[i] = 255; count++;}

        if(directionDEG < 0 || directionDEG > 360)
        {
            cout<<"Weird gradient direction given in method: getGradients.";
        }

}

}


grad_x and grad_y是CV_16SC1类型的Mats,即其中的每个像素占用两个字节。

然而你声明pixelX and pixelY指向 8 位字节的指针。所以pixelX[1]是第一个梯度的第二个字节,而不是第二个梯度。

你需要

short* pixelX = grad_x.ptr<short>(0);
short* pixelY = grad_y.ptr<short>(0);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用OpenCV的Sobel运算计算图像梯度方向 的相关文章

  • 在 Python 中倾斜数组

    我有一个 2D 数组 我将使用它保存为灰度图像scipy misc toimage 在此之前 我想将图像倾斜给定角度 像这样进行插值scipy ndimage interpolation rotate 上图只是为了说明倾斜过程 我知道我必须
  • 如何使用 PySpark 预处理图像?

    我有一个项目 需要为 1 设置大数据架构 AWS S3 SageMaker 的概念验证使用 PySpark 预处理图像 2 执行 PCA and 3 训练一些机器或深度学习模型 我的问题是了解如何使用 PySpark 操作图像数据 但无法在
  • Matlab颜色检测

    我试图一致地检测同一场景的图像之间的某种颜色 这个想法是根据颜色配置文件识别一组对象 因此 例如 如果给我一个带有绿色球的场景 并且我选择绿色作为我的调色板的一部分 我想要一个具有反映它检测到球的矩阵的函数 任何人都可以为这个项目推荐一些
  • 预训练 inception v3 模型的层名称(tensorflow)[重复]

    这个问题在这里已经有答案了 任务是获取a的每层输出预训练的 cnn inceptionv3 https www tensorflow org versions master tutorials image recognition index
  • 直方图均衡结果

    I am trying to code histogram equalization by my self but the results are different from the built in function in matlab
  • 从图像坐标获取对象的世界坐标

    I have been following this http docs opencv org modules calib3d doc camera calibration and 3d reconstruction html docume
  • 在 Visual Studio 中调试非托管 C++ 图像

    我确实在 Visual Studio 2010 下的非托管 C 上编写了大量图像处理代码 其中涉及许多不同的图像 我希望能够在逐步调试时像简单标识符一样轻松地观看它们 我当前的解决方案是使用一些在 Matlab 控制台中导出图像的函数 可以
  • OpenCV IP 相机应用程序崩溃 [h264 @ 0xxxxx] 访问单元中缺少图片

    我在 cpp 中有一个 opencv 应用程序 它使用 opencv 的简单结构捕获视频流并将其保存到视频文件中 它与我的网络摄像头完美配合 但是 当我运行它从 IP 摄像机捕获流时 它可能会在大约十秒后崩溃 我的编译命令是 g O3 IP
  • 如何使用 Python 裁剪图像中的矩形

    谁能给我关于如何裁剪两个矩形框并保存它的建议 我已经尝试过这段代码 但效果不佳 import cv2 import numpy as np Run the code with the image name keep pressing spa
  • 使用 OpenCV 改进特征点匹配

    我想匹配立体图像中的特征点 我已经用不同的算法找到并提取了特征点 现在我需要一个良好的匹配 在本例中 我使用 FAST 算法进行检测和提取 BruteForceMatcher用于匹配特征点 匹配代码 vector lt vector
  • 如何确定与视频中物体的距离?

    我有一个从行驶中的车辆前面录制的视频文件 我将使用 OpenCV 进行对象检测和识别 但我停留在一方面 如何确定距已识别物体的距离 我可以知道我当前的速度和现实世界的 GPS 位置 但仅此而已 我无法对我正在跟踪的对象做出任何假设 我计划用
  • 最快的高斯模糊实现

    如何以最快的速度实施高斯模糊 http en wikipedia org wiki Gaussian blur算法 我要用Java来实现它 所以GPU http en wikipedia org wiki Graphics processi
  • OpenCV 跟踪器:模型未在函数 init 中初始化

    在视频的第一帧 我运行一个对象检测器 它返回对象的边界框 如下所示
  • 如何使用 opencv python 计算乐高积木上的孔数?

    我正在开发我的 python 项目 我需要计算每个乐高积木组件中有多少个孔 我将从输入 json 文件中获取有关需要计算哪个程序集的信息 如下所示 img 001 red 0 blue 2 white 1 grey 1 yellow 1 r
  • 加速 C# 中的矩阵加法

    我想优化这段代码 public void PopulatePixelValueMatrices GenericImage image int Width int Height for int x 0 x lt Width x for int
  • Opencv Mat内存管理

    内存管理对于图像类至关重要 在opencv中 图像类是cv Mat 它有一个微妙的内存管理方案 假设我已经有了自己的图像类SelfImage class SelfImage public int width int height unsig
  • OpenCV Mat 和 Leptonica Pix 之间的转换

    我需要在 C 中在 OpenCV Mat 图像和 Leptonica Pix 图像格式之间进行转换 这用于 8 位灰度图像的二值化 我发现发现了 ikaliga的回答 https stackoverflow com a 25929320 2
  • 将 4 通道图像转换为 3 通道图像

    我正在使用 OpenCV 2 4 6 我正在尝试将 4 通道 RGB IplImage 转换为 4 通道 HSV 图像 下面是我的代码 给出错误 OpenCV 错误 未知函数断言失败 我认为 cvCvtColor 支持 3 通道图像 有没有
  • 如何在 cv2.VideoWriter 中使用 FPS 参数?

    好的 所以我正在制作视频 我想确切地知道如何使用 FPS 参数 它是一个浮点数 所以我假设这是我想要的每帧之间的间隔 你能给个例子吗 我只想知道视频会如何随着 FPS 参数值的变化而变化 因为我制作的视频现在太快了 谢谢 确实只是这样 fr
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域

随机推荐

  • 如何在 build.json 中指定 Cordova 构建目标

    我执行时出错cordova build xcodebuild 错误 无法找到与提供的目标说明符匹配的目标 platform iOS Simulator OS latest name iPhone 11 Pro Max 由于我的应用程序仅在
  • @ResponseBody 返回空对象

    当我使用下面的方法来获取用户对象时 它工作得很好 GetMapping findOne ResponseBody public Optional
  • 我怎样才能添加温度。 Meteor 发布的字段

    有没有办法在发布函数内的服务器上添加临时额外字段 我似乎无法观察或转变工作 我对同一个集合 列表 有两个订阅 有时我想订阅某些列表 以便它们可用于聊天室列表 但问题是它们出现在我的 列表 模板中 独特的部分是在服务器上的性能 大型阵列 理想
  • 为什么 PhpStorm 检查说“Exception”未定义?

    PhpStorm不认识Exception由于某种原因 代码执行得很好 但我无法 转到 代码 这应该将我发送到Core c php Windows 操作系统有 尝试重新启动操作系统 的建议 这在许多 不起作用 突然停止工作 的情况下很有帮助
  • 在 postgresql 中创建扩展测试

    我想创建一个postgres 中的扩展测试 使用PostGis 所以我想执行以下步骤 1 编辑文件btree interval c from btree gist https github com postgres postgres tre
  • Jersey 2.0“入门”指南,找不到 mainClass

    嗨 我正在尝试遵循入门指南 https jersey github io documentation latest getting started html对于泽西岛 2 0 我按原样执行了步骤 1 1 和 1 2 那里没问题 对于步骤 1
  • ConstraintLayout、RadioGroup 和两列RadioButton

    我有一个 ConstraintLayout 作为根布局 它很好 不过 我现在有一个 RadioGroup 我必须在其中创建两列 RadioButtons 由于 ConstraintLayout 是为了摆脱嵌套布局 我认为将这些 RadioB
  • 如何使用 Javascript 从 url 下载文件?

    如何使用 Javascript 从 url 下载文件 我试图从文本字段中获取用户输入的网址 如下所示 new Ext form TextField disabled false fieldLabel file value id url 我需
  • 更好的 ruby​​ 终端着色库

    有很多着色库 colored term ansicolor 但有没有什么可以做到这一点 puts hello red world bold And world 应该是大胆的 为了说清楚 我想得到这个 e 1m e 31mhello e 0m
  • 应用风格的实际用途是什么?

    我是一名 Scala 程序员 现在正在学习 Haskell 很容易找到 OO 概念的实际用例和现实世界示例 例如装饰器 策略模式等 书籍和互联网上充斥着这些内容 我开始意识到 对于函数概念来说 情况并非如此 例证 应用词 我正在努力寻找应用
  • 如何计算CNN的权重个数?

    考虑到用于将图像分为两类的卷积神经网络 我们如何计算权重数量 输入 100x100 灰度图像 LAYER 1 具有 60 个 7x7 卷积滤波器的卷积层 stride 1 有效 填充 LAYER 2 具有 100 个 5x5 卷积滤波器的卷
  • inner() 为参数“ax”获取了多个值

    在带有 Python 的 Jupyter 笔记本中 我正在从数据帧的两列绘制六边形联合图 该图绘制正确 但我无法调整图片大小 这是代码 fig ax plt subplots fig set size inches 11 7 8 27 sn
  • 如何使用反射调用java中的方法

    如何使用反射调用带参数的方法 我想指定这些参数的值 下面是使用涉及原语的反射来调用方法的简单示例 import java lang reflect public class ReflectionExample public int test
  • Android Smack 聊天客户端

    嗨 朋友们 我正在使用从以下网址下载的 Smack3 2 1 jar http www igniterealtime org downloads index jsp http www igniterealtime org downloads
  • 如何在 terraform 中使用嵌套循环

    我正在尝试使用 Terraform count 在 Azure 中创建 3 个虚拟机 每个虚拟机需要多个磁盘 有什么办法可以做到这一点吗 我尝试创建磁盘名称和大小的映射 但收到错误 无法同时使用 count 和 for each resou
  • Pickle Spark RDD 并将其读入 Python

    我正在尝试通过 pickle 来序列化 Spark RDD 并将 pickled 文件直接读入 Python a sc parallelize 1 2 3 4 5 a saveAsPickleFile test pkl 然后 我将 test
  • 类构造函数中选项对象的默认值

    我创建了一个类 我想为值设置一些默认选项 以防用户不提供任何参数 我最近使用了一个将多个参数传递给一个对象的构造函数 因为我相信当用户创建该类的新实例时 它有助于提高可读性 这是我之前的做法 module exports class Use
  • 根据 codeigniter 中的用户角色重定向到管理员和用户

    如果管理员正在登录 我希望他进入管理 仪表板 否则到用户仪表板 登录控制器如下 在用户表中 我有一列 角色 值为 1 和 2 1 代表管理员 2 代表用户 并且有单独的角色表 登录用户功能 public function login dat
  • 我可以将 MongoDB 配置为内存吗?

    我有兴趣使用一个能够实现高性能的数据库 并且预期需要集群进行大规模水平扩展 我们正在考虑使用 MongoDB 有谁知道我是否可以在内存中使用它 即在 RAM 中 出于性能原因 Tnx 截至今天 最新版本的 MongoDB 即 v3 4 在其
  • 使用OpenCV的Sobel运算计算图像梯度方向

    我正在尝试使用 OpenCV 的 Sobel 方法的结果来确定图像梯度方向 我知道这应该是一个非常简单的任务 我想我理解这个理论 但实现它比我想象的更具挑战性 我希望渐变方向在 0 360 度之间 但我的代码显示所有渐变都在 180 270