【发布时间】:2021-10-27 16:16:11
【问题描述】:
我从下图开始:
使用 opencv 我绕 Y 轴旋转 45° 得到以下结果:
如果我再努力一点,我可以让它不在前景中被裁剪。
现在我的问题是:opencv 是否有工具来进行反向转换?我可以拍摄第二张图像并制作第一张图像吗? (不关心模糊像素。)请提出一种方法。
【问题讨论】:
标签: opencv perspective
我从下图开始:
使用 opencv 我绕 Y 轴旋转 45° 得到以下结果:
如果我再努力一点,我可以让它不在前景中被裁剪。
现在我的问题是:opencv 是否有工具来进行反向转换?我可以拍摄第二张图像并制作第一张图像吗? (不关心模糊像素。)请提出一种方法。
【问题讨论】:
标签: opencv perspective
是的,有可能。旋转 45° 后,下方和上方的某些区域缺失(未看到)。你只是不能拿回那些零件。
通过同时使用warpPerspective() 和getPerspectiveTransform(),您可以轻松返回到第一张图片。您唯一需要考虑的是您应该确定旋转图像的端点。如:left_up、right_up、left_down、right_down。由于您没有指定语言,因此我使用 C++ 来实现这些功能。这是输出和代码:
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <fstream>
int main()
{
cv::Mat begin = cv::imread("/ur/img/dir/input.jpg");
cv::Mat output;
cv::Point2f Poly2[4] = {
cv::Point2f(31,9),
cv::Point2f(342,51),
cv::Point2f(28,571),
cv::Point2f(345,525), //points I got from looking in paint.
};
cv::Point2f Points[4] = {
cv::Point2f(0,0),
cv::Point2f(432,0),
cv::Point2f(0,576), //The picture I want to transform to.
cv::Point2f(432,576),
};
cv::Mat Matrix = cv::getPerspectiveTransform( Poly2,Points);
cv::warpPerspective(begin, output, Matrix, cv::Size(432, 576));
cv::imshow("Input", begin);
cv::imshow("Output", output);
cv::imwrite("/home/yns/Downloads/tt2.jpg",output);
cv::waitKey(0);
return 0;
}
【讨论】:
【讨论】: