在opencv和c ++中画一个西门子星

时间:2014-04-27 17:40:24

标签: c++ opencv visual-c++ drawing

我是opencv的新手。我应该在c ++和opencv中实现一个西门子星(http://upload.wikimedia.org/wikipedia/commons/5/50/Siemens_star.svg)。经过几天的互联网搜索,我非常沮丧,希望你能帮助我。我不知道如何开始。我实现它的第一个想法是从中心绘制实心三角形并用圆圈裁剪它们。但我认为在opencv中没有绘制三角形的函数。我的第二种方法是绘制两个向量之间的所有点,但我的数学知识非常差(就像我的英语,对不起;))。 请帮助我..

谢谢!

3 个答案:

答案 0 :(得分:3)

这是您使用cv::ellipse

执行此操作的方法
cv::Mat siemensStar(unsigned int radius, unsigned int number_of_pieces)
{
    // create output image
    cv::Mat star(2*radius, 2*radius, CV_8UC1, 255);

    // center in the middle of the image
    cv::Point2f center(radius,radius);

    // angle of a single arc (mind that there is always one black and one white arc
    float angle = 360.0f/(2*(float)number_of_pieces);

    // draw all arcs
    for(float i=0; i<360; i+=2*angle)
    {
        // draw the outlines anti-aliased or change the line type if you want
        cv::ellipse(star, center, cv::Size(radius,radius), 0, i, i+angle, cv::Scalar(0),-1, CV_AA);
    }

    return star;
}

这有效,并给我打电话cv::imshow("siemens star", siemensStar(256,16));这个结果:

enter image description here

请注意,这可能不是你想要的(因为中心的光学效果不是真的可见),但这就是我认为的光栅(在绘图过程中)的问题。我们这里不使用矢量图像。如果元素数量减少可能会更好......

答案 1 :(得分:1)

您可以使用ellipse()绘制一组填充的椭圆扇区。

答案 2 :(得分:0)

您的假设是错误的,有一个绘制三角形的函数:fillPoly。你可以通过谷歌搜索&#34; OpenCV draw&#34;。