【问题标题】:Get Orientation Histogram from Pixel Patch OpenCV从像素补丁 OpenCV 获取方向直方图
【发布时间】:2016-09-22 13:39:43
【问题描述】:

我尝试从 CV 的 phase() 方法的结果中获取方向直方图。我尝试获取每个像素的圆角方向并将其除以 10。例如,对于 5x5 像素补丁,它看起来像这样:

{ 1 36 20 3 14
5 16 11 6 9
7 12 34 22 0
34 5 9 21 4
5 21 28 30 1}

我的问题是,我真的不知道如何扫描 Patch 的每个像素,然后获取它的 OrientationValue 来计算直方图的值。

我获取 Orientation Mat 的代码如下所示:

 Mat patch = src(Rect(px,py,15,15));

 Mat Sx;
 Sobel(patch, Sx, CV_32F, 1, 0, 3);

 Mat Sy;
 Sobel(patch, Sy, CV_32F, 0, 1, 3);

 Mat mag, ori;
 magnitude(Sx, Sy, mag);
 phase(Sx, Sy, ori, true);

 int** hist;

在变量 hist 中,我想通过另一种方法添加值。 我希望有人能理解我的想法并能帮助我。

我现在有一个计划,如何遍历给定的方向图像我使用文档中显示的循环 OpenCV Docu

for( i = 0; i < ori.rows; i++){
    for( j = 0; j < ori.cols; j++){
        cout << ori.at<uchar>(i,j) << endl;
    }
}

但是访问这样的值不会给我方向值。有什么线索吗?

【问题讨论】:

  • ori 来自类型 CV_32F 而不是 CV_8U,因此请尝试 ori.at&lt;float&gt;(i,j) 或将 Sx 转换为 convertScaleAbs
  • convertScaleAbs 无法工作,因为 phase() 需要浮点值,所以忘记了
  • 它有效,谢谢!不知道我该如何监督。
  • 我还有一个小问题可能你可以帮我解决这个问题@PSchn 如果我想创建一个 OpenCV 直方图而不是一个 Int 矩阵,我该如何完成?我从 OpenCV 文档中复制了关于直方图的示例,但它不起作用。错误是:Thread 1: signal SIGABRT 就像上面的示例一样,我想将其分成 10 个步骤。
  • 你能提供你的代码吗?你在什么操作系统上工作?

标签: c++ arrays opencv computer-vision histogram


【解决方案1】:

Ori 来自CV_32F 类型而不是CV_8U,因此请尝试ori.at&lt;float&gt;(i,j) ro 访问方向值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-20
    • 2016-10-20
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 2015-03-27
    相关资源
    最近更新 更多