仿射变换(给定的参数,以获得的变换矩阵)

本文介绍了一个使用OpenCV库进行图像处理的示例程序。该程序读取指定的彩色图像文件,设置感兴趣区域(ROI),并对其进行旋转操作。具体步骤包括加载图像、设置ROI、计算旋转矩阵,并使用仿射变换实现旋转。
#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; 
}
            
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值