由于这段代码,我使用openCv进行了delaunay三角测量: 示例代码 (在partiluclar draw_subdiv中).然而,当我想显示三角测量时,我得到不属于三角测量的网格和线.这条线是由于三角测量算法开始其工作考虑在"无限"处发布的三角形.
你能解释一下我如何只将网格划入凸包(没有这条线)吗?
显示功能:
void draw_subdiv(Mat &img, Subdiv2D& subdiv, Scalar delaunay_color)
{
vector<Vec6f> triangleList;
subdiv.getTriangleList(triangleList);
vector<Point> pt(3);
for(size_t i = 0; i < triangleList.size(); ++i)
{
Vec6f t = triangleList[i];
pt[0] = Point(cvRound(t[0]), cvRound(t[1]));
pt[1] = Point(cvRound(t[2]), cvRound(t[3]));
pt[2] = Point(cvRound(t[4]), cvRound(t[5]));
line(img, pt[0], pt[1], delaunay_color, 1);
line(img, pt[1], pt[2], delaunay_color, 1);
line(img, pt[2], pt[0], delaunay_color, 1);
}
}
Run Code Online (Sandbox Code Playgroud)
主功能 :
Mat image = imread(argv[1], 1);
..... ....
//creat delaunay
Scalar delaunay_color(255, 255, 255), point_color(0,0,255);
Rect rect(0,0,image.cols, image.rows);
Subdiv2D subdiv(rect);
for(int i = 0; i < point.getDim(); ++i)
{
Point2f fp(point.getCoord()[i].real(), point.getCoord()[i].imag());
subdiv.insert(fp);
}
draw_subdiv(image, subdiv, delaunay_color);
imwrite("data/delaunay.jpg", image);
Run Code Online (Sandbox Code Playgroud)
结果:

And*_*uri 10
嗯,我认为这很容易.只需检测点何时不在图像中并且不要绘制它们.
在你的显示功能中写:
void draw_subdiv(Mat &img, Subdiv2D& subdiv, Scalar delaunay_color)
{
bool draw;
vector<Vec6f> triangleList;
subdiv.getTriangleList(triangleList);
vector<Point> pt(3);
for(size_t i = 0; i < triangleList.size(); ++i)
{
Vec6f t = triangleList[i];
pt[0] = Point(cvRound(t[0]), cvRound(t[1]));
pt[1] = Point(cvRound(t[2]), cvRound(t[3]));
pt[2] = Point(cvRound(t[4]), cvRound(t[5]));
// MY PIECE OF CODE
draw=true;
for(int i=0;i<3;i++){
if(pt[i].x>img.width||pt[i].y>img.heigth||pt[i].x<0||pt[i].y<0)
draw=false;
}
if (draw){
line(img, pt[0], pt[1], delaunay_color, 1);
line(img, pt[1], pt[2], delaunay_color, 1);
line(img, pt[2], pt[0], delaunay_color, 1);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11775 次 |
| 最近记录: |