仿射变换(给定的参数,以获得的变换矩阵)
来源:互联网 发布:旋转变换矩阵 编辑:程序博客网 时间:2024/05/21 14:03
#include "stdafx.h"#include <iostream>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>using namespace cv;using namespace std; int main(int argc, char **argv) { // (1)load a specified file as a 3-channel color image, // set its ROI, and allocate a destination image const string imagename = argc > 1 ? argv[1] : "../image/building.jpg"; Mat src_img = imread(imagename); if(!src_img.data) return -1; Mat dst_img = src_img.clone(); // (2)set ROI Rect roi_rect(cvRound(src_img.cols*0.25), cvRound(src_img.rows*0.25), cvRound(src_img.cols*0.5), cvRound(src_img.rows*0.5)); Mat src_roi(src_img, roi_rect); Mat dst_roi(dst_img, roi_rect); // (2)With specified three parameters (angle, rotation center, scale) // calculate an affine transformation matrix by cv2DRotationMatrix double angle = -45.0, scale = 1.0; Point2d center(src_roi.cols*0.5, src_roi.rows*0.5); const Mat affine_matrix = getRotationMatrix2D( center, angle, scale ); // (3)rotate the image by warpAffine taking the affine matrix warpAffine(src_roi, dst_roi, affine_matrix, dst_roi.size(), INTER_LINEAR, BORDER_CONSTANT, Scalar::all(255)); // (4)show source and destination images with a rectangle indicating ROI rectangle(src_img, roi_rect.tl(), roi_rect.br(), Scalar(255,0,255), 2); namedWindow("src", CV_WINDOW_AUTOSIZE); namedWindow("dst", CV_WINDOW_AUTOSIZE); imshow("src", src_img); imshow("dst", dst_img); waitKey(0); return 0; }