【发布时间】:2014-03-29 07:11:13
【问题描述】:
我想旋转一张图片,但是不裁剪就无法获得旋转后的图片
我的原图:
现在我使用这个代码:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
// Compile with g++ code.cpp -lopencv_core -lopencv_highgui -lopencv_imgproc
int main()
{
cv::Mat src = cv::imread("im.png", CV_LOAD_IMAGE_UNCHANGED);
cv::Mat dst;
cv::Point2f pc(src.cols/2., src.rows/2.);
cv::Mat r = cv::getRotationMatrix2D(pc, -45, 1.0);
cv::warpAffine(src, dst, r, src.size()); // what size I should use?
cv::imwrite("rotated_im.png", dst);
return 0;
}
并获得如下图片:
但我想得到这个:
【问题讨论】:
-
毕达哥拉斯...找到矩形对角线,并将其用于高度和宽度。
-
使用毕达哥拉斯我将获得高度和宽度,但图像定位不正确。
-
如果在旋转之前把它放在中间会更好。
-
SHR,我该如何使用 warpAffine?
-
您可以在以下Github存储库中获取接受答案的代码:Rotate an image matrix in 2D without cropping。随意分享和改进它!