1 Mat make = Mat::zeros(img.size(), CV_8UC1); 2 RotatedRect rRect(center, Size(200, 50), -45); 3 Point2f rRectPoint[4]; 4 rRect.points(rRectPoint); 5 for (int i =0; i < 4; i++) 6 { 7 line(make, rRectPoint[i], rRectPoint[(i+1)%4], Scalar(255)); 8 } 9 floodFill(make, center, 255, nullptr); // 255像素填充旋转矩形 10 Mat makeImg; 11 bitwise_and(grayImg, make, makeImg);
效果如下:
当图片旋转的时候,用旋转矩形ROI代码如上。
也有想过用其他方法,比如先旋转图片,再绘制矩形ROI,这种方法会调用warpAffine(),如果图片过大,耗费时间特别多,例如45度旋转一个600*500的图像就需要70ms左右时间。
还有另一种方法,先抠图再旋转,实测扣个300*300矩形旋转45度要30ms,也是很浪费时间。
最开始的方法,绘制旋转矩形再填充图片,只需要1ms不到的时间。