OpenCV - 端盖控制

时间:2014-04-02 16:35:19

标签: android opencv

我正在尝试绘制一条带有方括号的行(line()),但找不到任何文档告诉我该怎么做。到目前为止,我的所有线都以小三角形结束。

可以这样做吗?它与lineType有关吗?

编辑:我的使用示例......

line(ptr_to_mat, Point(10,25), Point(30,25), Scalar(255,0,0,0),4, 8, 0);

enter image description here

编辑:我应该提到,这是在Android设备上运行。

3 个答案:

答案 0 :(得分:2)

根据OpenCV docs,函数line()将绘制带有舍入结尾的粗线

那说,你不能直接克服这一点。但是,您可以使用thickness=1多次绘制它或绘制一个填充的矩形来实现您的目标(虽然丑陋:():

line(ptr_to_mat, Point(10,23), Point(30,23), CV_RGB(255,0,0), 1, 8, 0);
line(ptr_to_mat, Point(10,24), Point(30,24), CV_RGB(255,0,0), 1, 8, 0);
line(ptr_to_mat, Point(10,25), Point(30,25), CV_RGB(255,0,0), 1, 8, 0);
line(ptr_to_mat, Point(10,26), Point(30,26), CV_RGB(255,0,0), 1, 8, 0);

你会得到:

enter image description here

答案 1 :(得分:0)

同样来自文档 - “线条被图像边界剪切。” - 也许您可以通过在Mat的感兴趣区域内绘制线条来修剪圆形边缘( ROI,又名submat)。基本上,您必须使用线的大小减去圆形尖端来设置ROI的尺寸。如果这听起来太复杂,那就简单了。

这不是很优雅,但考虑到在线条绘制算法中剪切是免费的,这可能比绘制几条线/矩形更有效。

另一件事,尝试更改lineType参数,它可能会改变提示渲染。

lineType:

    8 (or omitted) - 8-connected line.
    4 - 4-connected line.
    CV_AA - antialiased line.

或者您可以随时实现自己的线条渲染器?

我从未说过它会很漂亮:D

答案 2 :(得分:0)

这个话题有点老了,但是我最近遇到了这个问题,我通过使用库wxpython找到了解决方案。也许有帮助,这是一个代码示例:

import wx

app = wx.App()

frame = wx.Frame(None, title="Draw on Image")

imgBit = wx.Bitmap(width=512, height=512, depth=1)
dc = wx.MemoryDC(imgBit)
pen = wx.Pen(wx.RED, 3)
pen.SetCap(wx.CAP_BUTT)
dc.SetPen(pen)
dc.DrawLines(((32, 32), (64, 32)))
dc.SelectObject(wx.NullBitmap)
imgBit.SaveFile("bitmap.png", wx.BITMAP_TYPE_PNG)

希望它将对以后的人有所帮助