2017-01-15 21 views
2

Я использую метод ниже для поворота изображения Mat src в градусах угла, используя opencv dll для выполнения этой операции. Однако выходное изображение должно быть изменено и изменено. Как определить масштабный коэффициент в зависимости от угла поворота, чтобы сохранить источник. В настоящее время я дал коэффициент масштабирования как 1,0. Также, как изменить размер изображения в зависимости от угла поворота? 1. The image obtained on 90 degrees rotation: 2. Desired result: Как я могу получить изображение нет. 2?Как масштабировать изображение при вращении (используя opencv) в java?

private static Mat deskew(Mat src, double angle) { 
    Point center = new Point(src.width()/2, src.height()/2); 
    Mat rotImage = Imgproc.getRotationMatrix2D(center, angle, 1.0); 
     Size size = new Size(src.width(), src.height()); 

     Imgproc.warpAffine(src, src, rotImage, size, Imgproc.INTER_LINEAR 
       + Imgproc.CV_WARP_FILL_OUTLIERS); 
     return src; 
    } 

ответ

1

Смотрите, если этот код является полезным

void rotateMatCW(const cv::Mat& src, cv::Mat& dst, const double& deg) 
    if (deg == 270 || deg == -90){ 
     // Rotate clockwise 270 degrees 
     cv::transpose(src, dst); 
     cv::flip(dst, dst, 0); 
    } 
    else if (deg == 180 || deg == -180){ 
     // Rotate clockwise 180 degrees 
     cv::flip(src, dst, -1); 
    } 
    else if (deg == 90 || deg == -270){ 
     // Rotate clockwise 90 degrees 
     cv::transpose(src, dst); 
     cv::flip(dst, dst, 1); 
    } 
    else if (deg == 360 || deg == 0 || deg == -360){ 
     if (src.data != dst.data){ 
      src.copyTo(dst); 
     } 
    } 
    else 
    { 
     cv::Point2f src_center(src.cols/2.0F, src.rows/2.0F); 
     cv::Mat rot_mat = getRotationMatrix2D(src_center, 360 - deg, 1.0); 
     warpAffine(src, dst, rot_mat, src.size()); 
    } 
} 
+0

Он работал :) спасибо !! –

1
public static void main(String[] args) { 
    Mat source = Imgcodecs.imread("e://src//lena.jpg"); 
    Mat rotMat = new Mat(2, 3, CvType.CV_32FC1); 
    Mat destination = new Mat(source.rows(), source.cols(), source.type()); 
    Point center = new Point(destination.cols()/2, destination.rows()/2); 
    rotMat = Imgproc.getRotationMatrix2D(center, 30, 1); 
    Imgproc.warpAffine(source, destination, rotMat, destination.size()); 
    Imgcodecs.imwrite("E://out//lena-rotate.jpg", destination); 

}