图像翻转、旋转、混合

图像翻转

在OpenCV中,图像翻转可以使用cv::flip()函数来实现。cv::flip()函数可以将图像在水平或垂直方向进行翻转操作。

flip( )

void cv::flip
    cv::InputArray src, // 输入图像,可以是单通道或多通道的图像。
    cv::OutputArray dst, // 输出图像,用于存储翻转后的结果。
    int flipCode // 翻转方式
);

flipCode:翻转方式,指定了图像翻转的方向。可以选择以下三种方式:
- 0:沿x轴翻转(垂直翻转)。
- 1:沿y轴翻转(水平翻转)。
- -1:同时沿x轴和y轴翻转(水平垂直翻转)

#include <opencv2/opencv.hpp>

int main() {
    // 读取图像
    cv::Mat image = cv::imread("image.jpg");

    if (image.empty()) {
        std::cout << "无法读取图像文件!" << std::endl;
        return -1;
    }

    // 在水平方向翻转图像
    cv::Mat flippedImage;
    cv::flip(image, flippedImage, 1);

    // 显示原始图像和翻转后的图像
    cv::imshow("Original Image", image);
    cv::imshow("Flipped Image", flippedImage);
    cv::waitKey(0);

    return 0;
}

图像旋转

warpAffine( )

用于执行二维仿射变换的函数,它的作用是将输入图像按照指定的仿射变换矩阵进行变换,并输出变换后的图像。

void cv::warpAffine(
    cv::InputArray src, // 输入图像
    cv::OutputArray dst, // 输出图像
    cv::InputArray M, // 变换矩阵
    cv::Size dsize, // 输出图像的大小
    int flags = cv::INTER_LINEAR, // 插值方法,默认为线性插值
    int borderMode = cv::BORDER_CONSTANT, // 边界填充模式,默认为常数边界填充
    const cv::Scalar& borderValue = cv::Scalar() // 常数边界填充的颜色,默认为黑色
);

cv::getRotationMatrix2D()

getRotationMatrix2D是OpenCV中用于生成二维旋转变换矩阵的函数

cv::Mat cv::getRotationMatrix2D(
    cv::Point2f center, // 旋转中心点
    double angle, // 旋转角度(逆时针为正)
    double scale // 缩放因子
);

cv::getRotationMatrix2D()函数的参数有以下几个:

  • center:旋转中心点,指定旋转中心的坐标。可以使用cv::Point2f结构或cv::Point结构指定。
  • angle:旋转角度,表示以旋转中心为基准进行逆时针旋转的角度。正值表示逆时针旋转,负值表示顺时针旋转。
  • scale:缩放因子,表示对图像进行缩放的比例。默认值为1.0,表示不进行缩放。

这个函数返回一个2x3的仿射变换矩阵,可以用于后续的图像变换操作。通过调整center、angle和scale参数,可以生成不同的旋转变换矩阵,实现图像的旋转和缩放效果。
在图像处理和计算机视觉应用中,getRotationMatrix2D函数通常与warpAffine函数结合使用,用于对图像进行旋转、缩放等操作。

代码示例:

// 使用cv::getRotationMatrix2D()函数和cv::warpAffine()函数配合进行旋转
cv::Mat srcImage = cv::imread("image.jpg");
double angle = 45.0; // 旋转角度,单位为度
cv::Point2f center(srcImage.cols / 2.0, srcImage.rows / 2.0); // 旋转中心
cv::Mat rotMat = cv::getRotationMatrix2D(center, angle, 1.0); // 旋转矩阵
cv::Mat dstImage;
cv::warpAffine(srcImage, dstImage, rotMat, srcImage.size());

图像混合

addWeighted 是 OpenCV 中用于图像混合的函数之一。
这个函数可以用于将两个图像按照一定的权重进行线性组合,生成一个新的图像。
通常情况下,这个函数可以用于图像融合、图像叠加等操作。

基本语法:

void cv::addWeighted(InputArray src1,   //第一个输入数组,即第一个图像。
					 double alpha, InputArray src2,  //第二个输入数组,即第二个图像。
					 double beta,      //第二个输入数组的权重
					 double gamma,     //标量值,用于将加权和截断到特定范围内。通常情况下为0。
					 OutputArray dst,  //输出数组,用于存储结果图像。
					 int dtype = -1   //输出数组的数据类型,默认为-1表示与输入数组相同。
					);

代码示例:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main() {
    Mat image1 = imread("image1.jpg");
    Mat image2 = imread("image2.jpg");

    double alpha = 0.5;  // 第一个输入图像的权重
    double beta = 0.5;   // 第二个输入图像的权重

    Mat blendedImage;
    addWeighted(image1, alpha, image2, beta, 0.0, blendedImage);

    imshow("Blended Image", blendedImage);
    waitKey(0);

    return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值