【发布时间】:2015-11-29 15:51:07
【问题描述】:
我正在用更好的解释来问这个问题。
我已经获得了希望对其执行扭曲透视变换的矩形的四个点。当我手动选择了点并为变换分配了它们的位置时,我已经成功地对我的一张图像进行了变换。
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);
如您所见,我手动将角分配给转换顶点。
由于我希望在多个略有不同的图像上使用此代码,因此我想要一种更准确的分配角的方法。
所有图像看起来都类似于:
此图像的角如下: 左上角 - (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很陌生,如果这很明显,我很抱歉。
【问题讨论】:
-
你的意思是你想从 1106 取回 (1106, 331) ?仅使用最大和最小信息是无法做到的,您需要搜索具有
x值的顶点。