【问题标题】:Matlab strel function parameter as octagon in opencv cppMatlab strel函数参数作为opencv cpp中的八角形
【发布时间】:2016-01-18 15:27:29
【问题描述】:

我有几行 matlab 代码来应用八角形的结构元素。我想把同样的代码转换成opencv cpp。

Matlab 代码

se1 = strel('octagon',3);
imgNew = imerode(image,se1);

Opencv Cpp 代码

我知道我们可以创建一个结构元素然后我们必须调用 erode 函数,但是如何在 opencv 中创建八边形结构元素。

element = ??
erode(image,dst,element);

如何在opencv中创建八边形结构元素?

【问题讨论】:

  • 除非您自己创建结构化元素,否则没有等效的调用。
  • 感谢您的回复。如何创建八边形结构元素。请
  • 如果椭圆符合您的需要,您可以使用内置函数cv::getStructuringElement(int shape, Size ksize, Point anchor=Point(-1,-1)),其中形状可以是“MORPH_RECT”、“MORPH_ELLIPSE”或“MORPH_CROSS”。更多信息docs.opencv.org/3.0-beta/modules/imgproc/doc/…
  • 在 MATLAB 中执行 open strel,然后搜索 MakeOctagonStrel 函数。您可以将该源代码翻译成 OpenCV C++。
  • 谢谢,我会试试的

标签: c++ matlab opencv image-processing


【解决方案1】:

一种简单的方法是计算八边形的顶点,然后使用fillConvexPoly 来绘制八边形。

M 必须是 3 的非负倍数(如在 Matlab 中)。

代码

#include <opencv2\opencv.hpp>
#include <vector>
using namespace std;
using namespace cv;

Mat1b getOctagon(int M)
{
    // M positive and multiple of 3
    CV_Assert((M > 0) && ((M % 3) == 0));

    int k = M / 3;
    int rows = M*2 + 1;
    int cols = M*2 + 1;
    Point c(M, M);

    Mat1b strel(rows, cols, uchar(0));

    // Octagon vertices

    //       0-1
    //      /   \
    //     7     2
    //     |  c  |
    //     6     3
    //      \   /
    //       5-4    


    vector<Point> vertices(8);
    vertices[0].x = c.x - k;
    vertices[0].y = 0;
    vertices[1].x = c.x + k;
    vertices[1].y = 0;

    vertices[2].x = cols-1;
    vertices[2].y = c.y - k;
    vertices[3].x = cols-1;
    vertices[3].y = c.y + k;

    vertices[4].x = c.x + k;
    vertices[4].y = rows-1;
    vertices[5].x = c.x - k;
    vertices[5].y = rows-1;

    vertices[6].x = 0;
    vertices[6].y = c.y + k;
    vertices[7].x = 0;
    vertices[7].y = c.y - k;

    fillConvexPoly(strel, vertices, Scalar(1));

    return strel;

}


int main()
{
    Mat1b kernel = getOctagon(3);

    //morphologyEx(src, dst, MORPH_ERODE, kernel);

    return 0;
}

结果

M = 3:

M = 12:

【讨论】:

    猜你喜欢
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 1970-01-01
    • 2011-01-03
    • 2015-10-02
    • 2021-03-16
    • 1970-01-01
    相关资源
    最近更新 更多