opencv——(动态)旋转图像

#include "stdafx.h"
#include <opencv2\opencv.hpp>
#include <opencv\cv.h>
#include <iostream>
#include<string>
#include <windows.h>
using namespace std;
using namespace cv;


int _tmain(int argc, _TCHAR* argv[])
{
    
    
    IplImage *src = cvLoadImage("lena.jpg");
    IplImage *dst = 0;

    /* the first command line parameter must be image file name */
    if (src != 0)
    {
        int delta = 1;
        int angle = 45;
        int opt =0;        // 1: 旋转加缩放
        // 0:  仅仅旋转
        double factor;

        dst = cvCloneImage (src);
        cvNamedWindow ("src", 1);
        cvShowImage ("src", src);
                
        for (;;)
        {
            float m[6];
            // Matrix m looks like:
            //
            // [ m0  m1  m2 ] ===>  [ A11  A12   b1 ]
            // [ m3  m4  m5 ]       [ A21  A22   b2 ]
            //
            CvMat M = cvMat (2, 3, CV_32F, m);
            int w = src->width;
            int h = src->height;
            if (opt)        // 旋转加缩放
                factor = (cos (angle * CV_PI / 180.) + 1.0) * 2;
            else            //  仅仅旋转
                factor = 1;
            m[0] = (float) (factor * cos (-angle * 2 * CV_PI / 180.));
            m[1] = (float) (factor * sin (-angle * 2 * CV_PI / 180.));
            m[3] = -m[1];
            m[4] = m[0];
            // 将旋转中心移至图像中间
            m[2] = w * 0.5f;
            m[5] = h * 0.5f;
            //  dst(x,y) = A * src(x,y) + b
            cvZero (dst);
            cvGetQuadrangleSubPix (src, dst, &M);
            cvNamedWindow ("dst", 1);
            cvShowImage ("dst", dst);
            if (cvWaitKey (1) == 27)    //ESC
                break;
            angle = (int) (angle + delta) % 360;
        }            // for-loop
    }
    return 0;

}

             

转载于:https://www.cnblogs.com/nanyangzp/p/3496466.html

OpenCV中,可以使用getRotationMatrix2D函数来实现图像旋转。该函数接受三个参数:旋转中心点坐标、旋转角度和缩放比例。例如,可以使用以下代码来旋转图像: ``` void rotate_demo(Mat& image) { Mat dst, M; int w = image.rows; int h = image.cols; // M 是用来旋转变换相乘的矩阵 M = getRotationMatrix2D(Point2f(w / 2, h / 2), 45, 1.0); // 计算新画布的尺寸 double cos = abs(M.at(0, 0)); double sin= abs(M.at(0, 1)); int nw = cos * w + sin * h;//新画布的宽 int nh = sin * w + cos * h;//新画布的高 // 将目标图像移到中心 M.at(0, 2) = (nw / 2 - w / 2); M.at(1, 2) = (nh / 2 - h / 2); // 进行仿射变换 warpAffine(image, dst, M, Size(nw,nh), INTER_LINEAR, 0, Scalar(0,255,0)); imshow("旋转图像", dst); } ``` 这个函数会将图像绕指定的中心点旋转一定角度,并且可以通过缩放比例来调整图像大小。在函数中,我们首先计算了新画布的尺寸,然后根据计算得到的矩阵M进行仿射变换,最后显示旋转后的图像。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [opencv图像旋转](https://download.csdn.net/download/u013088062/8303155)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [opencv图像处理——图像旋转](https://blog.csdn.net/sun_rui_houqi/article/details/108836570)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值