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
值搜索顶点。