gpt4 book ai didi

c++ - 矩形中的最大和最小顶点

转载 作者:太空宇宙 更新时间:2023-11-03 22:54:07 25 4
gpt4 key购买 nike

我正在重新提出这个问题并提供更好的解释。

我已经获得了要对其执行扭曲透视变换的矩形的四个点。当我手动选择点并为变换分配它们的位置时,我成功地对我的一张图像进行了变换。

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);

如您所见,我手动将角指定给变换顶点。

因为我希望在多个略有不同的图像上使用此代码,所以我想要一种更准确的分配角的方法。

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

http://imgur.com/t0cgTzr

这张图片的角点如下:左上 - (1106, 331),右上角- (810, 747),左下- (825, 187),右下- (510, 537)

我发现最大和最小 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;
}

}

这给了我:

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

我想知道如何将最大值和最小值重新组合为它们各自的值,以便我可以使用这些点来执行转换。我对 opencv 很陌生,如果这很明显,我很抱歉。

最佳答案

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

更好的是,摆脱那些循环并利用 STL

Point2f maxX =
*std::max_element(corners, corners+4, [](Point2f a, Point2f b){return a.x < b.x;});

关于c++ - 矩形中的最大和最小顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33984685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com