gpt4 book ai didi

matrix - 将梯形中的点位置转换为矩形位置

转载 作者:行者123 更新时间:2023-12-05 02:24:13 26 4
gpt4 key购买 nike

我正在尝试找出如何将下方绿色梯形内的坐标 Pxy 转换为真实地平面上的等效坐标。

我有房间的确切尺寸,这意味着我可以准确地说出 A、B、C 和 D 在下图所示的房间中有多长。我还知道 A、B、C 和 D 在那个绿色三角形中的长度(坐标方面)。

我已经阅读过有关单应性和矩阵变换的内容,但我无法真正理解它。任何引导我走向正确方向的意见都将不胜感激。

谢谢!

enter image description here

最佳答案

有代码使用 Opencv 库计算仿射变换矩阵(它显示了如何将梯形变换为矩形以及如何找到变换矩阵以进行进一步计算):

//example from book
// Learning OpenCV: Computer Vision with the OpenCV Library
// by Gary Bradski and Adrian Kaehler
// Published by O'Reilly Media, October 3, 2008

#include <cv.h>
#include <highgui.h>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
IplImage *src=0, *dst=0;

// absolute or relative path to image should be in argv[1]
char* filename = argc == 2 ? argv[1] : "Image0.jpg";
// get the picture
src = cvLoadImage(filename,1);

printf("[i] image: %s\n", filename);
assert( src != 0 );


// points (corners of )
CvPoint2D32f srcQuad[4], dstQuad[4];
// transformation matrix
CvMat* warp_matrix = cvCreateMat(3,3,CV_32FC1);

// clone image
dst = cvCloneImage(src);

// define all the points
//here the coordinates of corners of your trapezoid
srcQuad[0].x = ??; //src Top left
srcQuad[0].y = ??;
srcQuad[1].x = ??; //src Top right
srcQuad[1].y = ??;
srcQuad[2].x = ??; //src Bottom left
srcQuad[2].y = ??;
srcQuad[3].x = ??; //src Bot right
srcQuad[3].y = ??;
//- - - - - - - - - - - - - -//
//coordinates of rectangle in src image
dstQuad[0].x = 0; //dst Top left
dstQuad[0].y = 0;
dstQuad[1].x = src->width-1; //dst Top right
dstQuad[1].y = 0;
dstQuad[2].x = 0; //dst Bottom left
dstQuad[2].y = src->height-1;
dstQuad[3].x = src->width-1; //dst Bot right
dstQuad[3].y = src->height-1;

// get transformation matrix that you can use to calculate
//coordinates of point Pxy
cvGetPerspectiveTransform(srcQuad,dstQuad,warp_matrix);
// perspective transformation
cvWarpPerspective(src,dst,warp_matrix);


cvNamedWindow( "cvWarpPerspective", 1 );
cvShowImage( "cvWarpPerspective", dst );

cvWaitKey(0);

cvReleaseMat(&warp_matrix);

cvReleaseImage(&src);
cvReleaseImage(&dst);

cvDestroyAllWindows();
return 0;

希望对您有所帮助!

关于matrix - 将梯形中的点位置转换为矩形位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14830698/

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