鉴于用例,我想在特定图像中旋转ROI。例如,我在图像中预定义了边界框,现在的任务是代表角度旋转这些框内的图像部分。
此外,旋转必须位于边界框内,因此ROI在转换后进行裁剪。
我尝试创建边界框的子图像,而不是旋转它并将其放回源图像中的原始位置。问题是,我有一个巨大的图像数据集(> 100.000),我认为我的方法可能会减慢这个过程。
还有其他方法可以实现这种转变吗?
这是一个快速的模型,它应该如何照顾转换。
答案 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