我在問這個問題有一個更好的解釋。矩形中的最大和最小頂點
我已經獲得了一個矩形的四個點,我希望執行一個扭曲透視變換。當我手動選擇點併爲變換分配它們的位置時,我已成功實現了對其中一幅圖像的變換。
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,美星 - 747,MINY - 187
我想知道如何重組的最大值和最小值各自的值,以便我可以使用這些點來執行轉換。如果這非常明顯,我對opencv非常陌生,所以很抱歉。
你的意思是你想從1106弄(1106,331)回來嗎?只有最大值和最小值信息才能做到這一點,您需要搜索具有「x」值的頂點。 – VillasV