矩形中的最大和最小顶点
Max and min vertices in a rectangle
本文关键字:顶点 更新时间:2023-10-16
我再次提出这个问题,并给出了更好的解释。
我已经获得了要对其执行扭曲透视变换的矩形的四个点。当我手动选择这些点并为变换指定它们的位置时,我已经成功地对其中一个图像进行了变换。
cv::Point2f src_vertices[4];
src_vertices[0] = corners[3];
src_vertices[1] = corners[1];
src_vertices[2] = corners[0];
src_vertices[3] = corners[2];
Point2f dst_vertices[4];
dst_vertices[0] = Point(0, 0);
dst_vertices[1] = Point(box.boundingRect().width-1, 0);
dst_vertices[2] = Point(0, box.boundingRect().height-1);
dst_vertices[3] = Point(box.boundingRect().width-1, box.boundingRect().height-1);
如您所见,我手动将角指定给了变换顶点。
由于我希望在多个略有不同的图像上使用此代码,我希望有一种更准确的方式来分配角点。
所有的图像看起来都像这样:
https://i.stack.imgur.com/uqyFs.jpg
此图像的角如下所示:左上-(1106331),右上-(810747),左下-(825187),右下-(510537)
我发现最大值和最小值x和y如下:
float X, Y;
float maxX= 0;
float minX = 10000;
float maxY= 0;
float minY = 10000;
for(int i=0; i< 4; i++){
if( corners[i].x > maxX){
maxX = corners[i].x;
}
if( corners[i].x < minX){
minX = corners[i].x;
}
if( corners[i].y > maxY){
maxY = corners[i].y;
}
if( corners[i].y < minY){
minY = corners[i].y;
}
}
这给了我:
最大X-1106,最小X-510,最大Y-747,最小Y-187。
我想知道如何将最大值和最小值重新组合为它们各自的值,这样我就可以使用这些点来执行变换。我是opencv的新手,如果这很明显的话,我很抱歉。
要在不丢失其他坐标信息的情况下获得角点,可以找到整个点。您可以存储Point2f maxX(0,0);
并修改for
循环,以跟踪点本身,而不仅仅是x
坐标,而不是仅存储float maxX= 0;
。
更好的是,去掉这些循环并使用STL
Point2f maxX =
*std::max_element(corners, corners+4, [](Point2f a, Point2f b){return a.x < b.x;});
相关文章:
- 如何循环打印顶点结构
- D3D11-将混合权重和索引传递到顶点着色器
- 从返回的顶点缓冲区查询顶点结构
- Vulkan 中的动态顶点缓冲区格式设置
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 如何将一半传递给顶点着色器?
- 在 DirectX 11 中从 GPU 读回顶点缓冲区(并获取顶点)
- QT QOpenGLWidget:如何在不使用数据块复制的情况下修改VBO中的单个顶点值?
- 使用 OpenGL 4.5 更改所选顶点的颜色
- Direct3D 11 - HLSL - 获取顶点索引 ID
- 创建异构顶点数据数组的可移植方法
- 使用 glvertex4i 传递网格面索引时的顶点着色器错误
- 无法从 cso 文件创建顶点着色器(从 fx 文件创建)
- OpenGL 相机移动程序顶点着色器问题
- 使用 std::list 存储顶点并使用 SFML 绘制它们
- 为什么顶点数组对象会导致错误?
- 从 CGAL 3D 网格生成中获取顶点坐标的 -6.27744e+66:mesh_implicit_sphere示例
- 将顶点位置从顶点传递到片段着色器 - 仅在使用 Nsight 进行调试时有效
- FBX SDK 在预期 3 个顶点时返回 4 个顶点
- 我对 MyGraph 属性顶点名称和边权重有问题