C++ 矩形中的最大和最小顶点

C++ 矩形中的最大和最小顶点,c++,opencv,C++,Opencv,我是在用更好的解释重新问这个问题 我已经获得了一个矩形的四个点,我希望对其执行扭曲透视变换。我已经成功地在我的一幅图像上实现了变换,因为我手动选择了点并为变换指定了它们的位置 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_

我是在用更好的解释重新问这个问题

我已经获得了一个矩形的四个点,我希望对其执行扭曲透视变换。我已经成功地在我的一幅图像上实现了变换,因为我手动选择了点并为变换指定了它们的位置

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);
如您所见,我手动将角点指定给变换顶点

由于我希望在多个稍有不同的图像上使用此代码,我希望有一种更精确的方法来指定角点

所有图像看起来都与此相似:

此图像的角点如下所示: 左上角-(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;
    }

}
float X,Y;
float maxX=0;
浮点最小值=10000;
浮点最大值=0;
浮点数=10000;
对于(int i=0;i<4;i++){
if(角[i].x>maxX){
maxX=角[i].x;
}
if(角[i].xmaxY){
maxY=角[i].y;
}
if(角[i].y
这给了我:

maxX-1106,minX-510,maxY-747,minY-187


我想知道如何将最大值和最小值重新组合为各自的值,以便使用点执行变换。我对opencv非常陌生,如果这是非常明显的,那么很抱歉。

要在不丢失其他坐标信息的情况下获得角点,可以做的是找到整个点。而不是只存储
float maxX=0您可以存储
点2f maxX(0,0)并修改
以进行循环,以跟踪点本身,而不仅仅是
x
坐标

更好的是,去掉这些循环并使用STL

Point2f maxX=
*std::max_元素(角点,角点+4,[](点2f a,点2f b){返回a.x

你的意思是你想从1106取回(1106331)?您无法仅使用“最大值”和“最小值”信息来执行此操作,您需要使用该
x
值搜索顶点。