好吧,这个问题说明了一切,
我知道 Line()
函数,它在两点之间绘制线段。
我需要画线不是线段,也使用线段的两个点。
[EN:根据之前作为问题答案发布的内容进行编辑]
我使用了您的解决方案,它在水平线方面表现良好,但在垂直线方面仍然存在问题。
例如,下面是一个在 600x600 像素的图像上使用点 [306,411] 和 [304,8](紫色)以及绘制线(红色)的示例。你有什么建议吗?
最佳答案
我看到这是一个相当古老的问题。我有完全相同的问题,我使用了这个简单的代码:
double Slope(int x0, int y0, int x1, int y1){
return (double)(y1-y0)/(x1-x0);
}
void fullLine(cv::Mat *img, cv::Point a, cv::Point b, cv::Scalar color){
double slope = Slope(a.x, a.y, b.x, b.y);
Point p(0,0), q(img->cols,img->rows);
p.y = -(a.x - p.x) * slope + a.y;
q.y = -(b.x - q.x) * slope + b.y;
line(*img,p,q,color,1,8,0);
}
首先,我计算线段的斜率,然后将线段“延伸”到图像的边界中。我计算位于 x = 0 和 x = image.width 的直线的新点。点本身可以在Image之外,这是一种卑鄙的把戏,但解决办法很简单。
关于opencv - 如何画线而不是线段OpenCV 2.4.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13160722/