gpt4 book ai didi

c# - 如何使 PerspectiveTransform 工作?

转载 作者:太空狗 更新时间:2023-10-29 23:00:38 26 4
gpt4 key购买 nike

我只想重现发布的结果 here .

我将源代码重写为 EmguCV 形式。

    Image<Bgr, byte> image = new Image<Bgr, byte>(@"B:\perspective.png");

CvInvoke.cvShowImage("Hello World!", image);

float[,] scrp = { { 43, 18 }, { 280,40}, {19,223 }, { 304,200} };
float[,] dstp = { { 0,0}, { 320,0}, { 0,240 }, { 320,240 } };
float[,] homog = new float[3, 3];


Matrix<float> c1 = new Matrix<float>(scrp);
Matrix<float> c2 = new Matrix<float>(dstp);
Matrix<float> homogm = new Matrix<float>(homog);


CvInvoke.cvFindHomography(c1.Ptr, c2.Ptr, homogm.Ptr, Emgu.CV.CvEnum.HOMOGRAPHY_METHOD.DEFAULT, 0, IntPtr.Zero);
CvInvoke.cvGetPerspectiveTransform(c1, c2, homogm);

Image<Bgr, byte> newImage = image.WarpPerspective(homogm, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC, Emgu.CV.CvEnum.WARP.CV_WARP_DEFAULT, new Bgr(0, 0, 0));

CvInvoke.cvShowImage("newImage", newImage);

这是测试图像。 enter image description here

newImage 始终是空白图像。

任何人都可以帮助我使我的源代码工作吗???

最佳答案

希望我自己找到了答案。

我将源代码重写为错误的形式。我应该使用 Point[] 并且可以使用 CameraCalibration.GetPerspectiveTransform 函数。

    PointF[] srcs = new PointF[4];
srcs[0] = new PointF(253, 211);
srcs[1] = new PointF(563, 211);
srcs[2] = new PointF(563, 519);
srcs[3] = new PointF(253, 519);


PointF[] dsts = new PointF[4];
dsts[0] = new PointF(234, 197);
dsts[1] = new PointF(520, 169);
dsts[2] = new PointF(715, 483);
dsts[3] = new PointF(81, 472);

HomographyMatrix mywarpmat = CameraCalibration.GetPerspectiveTransform(srcs, dsts);
Image<Bgr, byte> newImage = image.WarpPerspective(mywarpmat, Emgu.CV.CvEnum.INTER.CV_INTER_NN, Emgu.CV.CvEnum.WARP.CV_WARP_FILL_OUTLIERS, new Bgr(0, 0, 0));

关于c# - 如何使 PerspectiveTransform 工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14351262/

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