我正在尝试绘制一条带有方括号的行(line()
),但找不到任何文档告诉我该怎么做。到目前为止,我的所有线都以小三角形结束。
可以这样做吗?它与lineType有关吗?
编辑:我的使用示例......
line(ptr_to_mat, Point(10,25), Point(30,25), Scalar(255,0,0,0),4, 8, 0);
编辑:我应该提到,这是在Android设备上运行。
答案 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);
你会得到:
答案 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)
希望它将对以后的人有所帮助