我是opencv的新手。我应该在c ++和opencv中实现一个西门子星(http://upload.wikimedia.org/wikipedia/commons/5/50/Siemens_star.svg)。经过几天的互联网搜索,我非常沮丧,希望你能帮助我。我不知道如何开始。我实现它的第一个想法是从中心绘制实心三角形并用圆圈裁剪它们。但我认为在opencv中没有绘制三角形的函数。我的第二种方法是绘制两个向量之间的所有点,但我的数学知识非常差(就像我的英语,对不起;))。 请帮助我..
谢谢!
答案 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));
这个结果:
请注意,这可能不是你想要的(因为中心的光学效果不是真的可见),但这就是我认为的光栅(在绘图过程中)的问题。我们这里不使用矢量图像。如果元素数量减少可能会更好......
答案 1 :(得分:1)
您可以使用ellipse()
绘制一组填充的椭圆扇区。
答案 2 :(得分:0)
您的假设是错误的,有一个绘制三角形的函数:fillPoly
。你可以通过谷歌搜索&#34; OpenCV draw&#34;。