旋转图片中的ROI

时间:2016-07-07 16:19:47

标签: c++ image opencv c++11 image-processing

鉴于用例,我想在特定图像中旋转ROI。例如,我在图像中预定义了边界框,现在的任务是代表角度旋转这些框内的图像部分。

此外,旋转必须位于边界框内,因此ROI在转换后进行裁剪。

我尝试创建边界框的子图像,而不是旋转它并将其放回源图像中的原始位置。问题是,我有一个巨大的图像数据集(> 100.000),我认为我的方法可能会减慢这个过程。

还有其他方法可以实现这种转变吗?

编辑:为了更好地理解 Original Image

这是一个快速的模型,它应该如何照顾转换。

Rotatet

2 个答案:

答案 0 :(得分:0)

如果您使用的是cv :: Mat,则yourMat(yourRect)将为您提供应旋转的图像的ROI。最快的方法是计算将ROI的四个角旋转到其目标点所需的仿射变换,然后将变换应用于ROI。使用ROI选择和仿射变换要比自己进行像素操作快得多,但我不确定是否有比使用仿射变换更快的方法。

答案 1 :(得分:0)

Mat rotateMatImage (Mat& src, double angle ,Mat& cdst) {

//  Rotate the angle which using warpAffine Methods
Mat rot_mat;
Mat rotated;
cv::Point2f src_center(cdst.cols/2.0F, cdst.rows/2.0F);
rot_mat = getRotationMatrix2D(src_center, angle, 1.0);

warpAffine(src, rotated, rot_mat, cdst.size(), cv::INTER_CUBIC);

return rotated;

}

请参阅文档http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html?highlight=warpaffine