图像仿射变换

#include <opencv2/core/core.hpp>        
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/imgproc/imgproc.hpp>  
#include <iostream> 
using namespace cv;
int main()
{
  // 读取图像及验证读入正确
  cv::Mat srcImage = cv::imread("..\\images\\sea.jpg");
  if(!srcImage.data) 
       return -1;
  cv::imshow("srcImage", srcImage);
  int nRows = srcImage.rows;
  int nCols = srcImage.cols;
  //定义仿射变换的二维点数组
  //源图像和目标图像对应映射的三点
  cv::Point2f srcPoint[3];
  cv::Point2f resPoint[3];
  srcPoint[0] = cv::Point2f(0, 0);
  srcPoint[1] = cv::Point2f(nCols-1, 0);
  srcPoint[2] = cv::Point2f(0, nRows-1);
  resPoint[0] = cv::Point2f(nCols*0, nRows*0.33);
  resPoint[1] = cv::Point2f(nCols*0.85, nRows*0.25);
  resPoint[2] = cv::Point2f(nCols*0.15, nRows*0.7);
  // 定义仿射变换矩阵2X3
  cv::Mat warpMat(cv::Size(2,3),CV_32F);
  cv::Mat resultImage = 
   cv::Mat::zeros(nRows, nCols, srcImage.type());
  // 计算仿射变换矩阵,即仿射变换的2*3数组
  warpMat = cv::getAffineTransform(srcPoint, resPoint);  
  // 根据仿射矩阵计算图像仿射变换
  cv::warpAffine(srcImage, resultImage,
      warpMat, resultImage.size());
  cv::imshow("resultImage1",resultImage);
  // 仿射变换参数设置
  cv::Point2f centerPoint = cv::Point2f(nCols/2, nRows/2);
  double angle = -50;
  double scale = 0.7;
  // 获取仿射变换矩阵
  warpMat = getRotationMatrix2D(centerPoint, angle, scale);
  // 对原图像角度仿射变换
  cv::warpAffine(srcImage, resultImage, 
      warpMat, resultImage.size());
  cv::imshow("resultImage2",resultImage);
  cv::waitKey(0);

}


转载:http://blog.csdn.net/zhuwei1988

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值