【发布时间】:2014-12-05 16:49:54
【问题描述】:
我刚刚引用了来自Rotate an image without cropping in OpenCV in C++的旋转图像示例的每个人
#include "opencv2/opencv.hpp"
int main()
{
cv::Mat src = cv::imread("im.png", CV_LOAD_IMAGE_UNCHANGED);
double angle = -45;
// get rotation matrix for rotating the image around its center
cv::Point2f center(src.cols/2.0, src.rows/2.0);
cv::Mat rot = cv::getRotationMatrix2D(center, angle, 1.0);
// determine bounding rectangle
cv::Rect bbox = cv::RotatedRect(center,src.size(), angle).boundingRect();
// adjust transformation matrix
rot.at<double>(0,2) += bbox.width/2.0 - center.x;
rot.at<double>(1,2) += bbox.height/2.0 - center.y;
cv::Mat dst;
cv::warpAffine(src, dst, rot, bbox.size());
cv::imwrite("rotated_im.png", dst);
return 0;
}
使用 opencv 2.4.9 (visual c++ 2010) 测试的代码
对我来说,我想让角度是可选的,这意味着我想将它从 0 更改为 360。 并将每张图片导入出来。 像这样:
#include "opencv2/opencv.hpp"
int main()
{ for (double i=0;i<361;i++)
{
cv::Mat src = cv::imread("refshape.bmp", CV_LOAD_IMAGE_UNCHANGED);
double angle = -i;
// get rotation matrix for rotating the image around its center
cv::Point2f center(src.cols/2.0, src.rows/2.0);
cv::Mat rot = cv::getRotationMatrix2D(center, angle, 1.0);
// determine bounding rectangle
cv::Rect bbox = cv::RotatedRect(center,src.size(), angle).boundingRect();
// adjust transformation matrix
rot.at<double>(0,2) += bbox.width/2.0 - center.x;
rot.at<double>(1,2) += bbox.height/2.0 - center.y;
cv::Mat dst;
cv::warpAffine(src, dst, rot, bbox.size());
cv::imwrite("rotated_im.png", dst);
}
return 0;
}
========================================== 改变角度很容易,但导入部分对我来说是挑战。 我想在我的文件中有 360 结果,我该怎么做? 我试图修改这一行:cv::imwrite("rotated_im.png", dst); 到 cv::imwrite("rotated_im_%d.png", i , dst);
它不适合它。
【问题讨论】:
-
你的问题应该是“如何动态地将数字添加到字符串”
-
像
imwrite(format(%d.png,i),img);一样使用cv::format() -
请更好地格式化问题并删除运行代码的选项。
-
@Haris 不是
%d.png,i,而是"%d.png,i"。还有一种更方便的使用方式是零填充imwrite(format("%05d.png, i), img);
标签: c++ image opencv filenames