我正在尝试使用OpenCV 的C++ API将1296x968图像旋转90度,我遇到了一些问题.
输入:

旋转:

如您所见,旋转的图像存在一些问题.首先,它具有与原始尺寸相同的尺寸,即使我专门Mat使用原始尺寸的反转尺寸创建目的地.结果,目标图像被裁剪.
我怀疑这种情况正在发生,因为我正在调用warpAffine()并传递原始Mat大小而不是目标大小Mat.但我这样做是因为我遵循了这个答案,但现在我怀疑答案可能是错的.所以这是我的第一个怀疑/问题.
第二,是,warpAffine()是在一定的书面形式向目的地偏移(可能在旋转的数据复制到图像中)和该操作留下了可怕的大黑边的图像周围.
我该如何解决这些问题?
我正在分享以下源代码:
#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace cv;
using namespace std;
void rotate(Mat& image, double angle)
{
Point2f src_center(image.cols/2.0F, image.rows/2.0F);
Mat rot_matrix = getRotationMatrix2D(src_center, angle, 1.0);
Mat rotated_img(Size(image.size().height, image.size().width), image.type());
warpAffine(image, rotated_img, rot_matrix, image.size());
imwrite("rotated.jpg", rotated_img);
}
int main(int argc, char* argv[])
{ …Run Code Online (Sandbox Code Playgroud) 我需要用C++旋转图像的代码,其功能类似于matlab的imrotate函数.请建议一个很好的链接.或者,如果有人可以提供imrotate的代码.
或者至少请解释一下算法.
它不是一个功课.我的项目需要这个代码.我们可以使用任何外部库或代码.