Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OpenCV:透视函数的参数是什么?_Java_Opencv_Image Processing_Homography - Fatal编程技术网

Java OpenCV:透视函数的参数是什么?

Java OpenCV:透视函数的参数是什么?,java,opencv,image-processing,homography,Java,Opencv,Image Processing,Homography,我正在用Java构建一个使用OpenCV的应用程序。我以前没有使用过这个库,而且Java实现有点缺乏文档。我需要撤消一个透视扭曲的图像,使其成为正方形。我需要把梯形变换成矩形。基本上,我需要拉伸两条平行边中较短的一条,以匹配较长平行边的长度。我知道我需要计算同音字并使用WarpPerspective函数,但我不知道如何构造这个命令。我知道单应性是什么,但我不知道如何声明单应性,也不知道如何输入透视图。让我强调一下,我理解这个理论,我只需要学习代码中的文本语法 例如,假设我的源梯形在(0,20)、

我正在用Java构建一个使用OpenCV的应用程序。我以前没有使用过这个库,而且Java实现有点缺乏文档。我需要撤消一个透视扭曲的图像,使其成为正方形。我需要把梯形变换成矩形。基本上,我需要拉伸两条平行边中较短的一条,以匹配较长平行边的长度。我知道我需要计算同音字并使用WarpPerspective函数,但我不知道如何构造这个命令。我知道单应性是什么,但我不知道如何声明单应性,也不知道如何输入透视图。让我强调一下,我理解这个理论,我只需要学习代码中的文本语法


例如,假设我的源梯形在(0,20)、(0,80)、(200,0)和(200100)处有角。然后,我想以一个矩形“拉伸”结束到(0,0),(0100),(200,0)和(200200)。有人能提供一个代码示例吗?图像是Mat格式的。

我不知道我是否能在Java中帮助您,但在C++中,解决方案非常简单:

// Matrix for getPerspectiveTransform()
Mat H( 2, 4, CV_32FC1 );
//Input and Output Image;
Mat input, output;
input = imread( "example.jpg", 1 );

std::vector<cv::Point2f> trapezoid;
std::vector<cv::Point2f> rectangular;

trapezoid.push_back(cv::Point2f(0,20));
trapezoid.push_back(cv::Point2f(0,80));
trapezoid.push_back(cv::Point2f(200,0));
trapezoid.push_back(cv::Point2f(200,100));

rectangular.push_back(cv::Point2f(0,0));
rectangular.push_back(cv::Point2f(0,100));
rectangular.push_back(cv::Point2f(0,200));
rectangular.push_back(cv::Point2f(200,200));

H = getPerspectiveTransform( trapezoid, rectangular );

warpPerspective( input, output, H,output.size() );
//getPerspectiveTransform()的矩阵
材料H(2,4,CV_32FC1);
//输入输出图像;
Mat输入、输出;
输入=imread(“example.jpg”,1);
向量梯形;
矢量矩形;
梯形。推回(cv::Point2f(0,20));
梯形。推回(cv::点2F(0,80));
梯形。推回(cv::点2F(200,0));
梯形推回(cv::Point2f(200100));
矩形。向后推(cv::Point2f(0,0));
矩形。推回(cv::Point2f(0100));
矩形。向后推(cv::Point2f(0200));
矩形。推回(cv::Point2f(200200));
H=getPerspectiveTransform(梯形、矩形);
warpPerspective(输入,输出,H,输出.size());
在java中,您可以看到以下两个链接,我认为它们完美地回答了您关于透视函数的所有问题:

我希望这对你有帮助

java代码

corners.add(new Point(215,90));
corners.add(new Point(470,90));
corners.add(new Point(540,240));
corners.add(new Point(150,240));
double maxWidth = 540 - 150 ;//BottomRight.x - BottomLeft.x
double maxHeight = 240 - 90 ; //BottomRight.y - TopLeft.y

target.add(new Point(0,0));
target.add(new Point(maxWidth-1,0));
target.add(new Point(0,maxHeight-1));
target.add(new Point(maxWidth-1,maxHeight-1));
trans=Imgproc.getPerspectiveTransform(Converters.vector_Point2f_to_Mat(corners), Converters.vector_Point2f_to_Mat(target));

Imgproc.warpPerspective(img, proj, trans, new Size(maxWidth,maxHeight));

orignal.updateFrame(Utils.fromMatToBufferedImage(img));
项目是目的地