7.6opencv中(基于C++) 镜像图像

基本概念

在OpenCV中,镜像图像指的是沿水平轴或垂直轴翻转图像。这对于预处理图像、数据增强或者实现某些视觉效果非常有用。OpenCV提供了flip函数来实现图像的翻转操作。

函数原型

void flip(
    InputArray src,
    OutputArray dst,
    int flipCode
);
参数说明

•src:输入图像。
•dst:翻转后的输出图像,将与输入图像具有相同的类型和大小。
•flipCode:指定翻转的方式: 
    •flipCode > 0:沿y轴翻转(水平翻转)。
    •flipCode == 0:沿x轴翻转(垂直翻转)。
    •flipCode < 0:沿中心翻转(同时沿x轴和y轴翻转)。

示例代码1

下面是一个使用OpenCV C++实现图像镜像翻转的示例代码:

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

using namespace std;
using namespace cv;

void mirrorImage(const Mat &src, Mat &dst, int flipCode) {
	flip(src, dst, flipCode);
}

int main(int argc, char** argv) 
{
	/*if (argc != 2) 
	{
		cout << "Usage: ./MirrorImage <Image Path>" << endl;
		return -1;
	}*/

	// 加载图像
	Mat img = imread("58.png");
	if (!img.data)
	{
		cout << "Error opening image" << endl;
		return -1;
	}

	// 初始化输出矩阵
	Mat flipped_horizontal, flipped_vertical, flipped_center;

	// 水平翻转
	mirrorImage(img, flipped_horizontal, 1);

	// 垂直翻转
	mirrorImage(img, flipped_vertical, 0);

	// 中心翻转
	mirrorImage(img, flipped_center, -1);

	// 显示结果
	/*imshow("Original Image", img);
	imshow("Flipped Horizontally", flipped_horizontal);
	imshow("Flipped Vertically", flipped_vertical);
	imshow("Flipped Center", flipped_center);*/
		namedWindow("Original Image", WINDOW_NORMAL);
		imshow("Original Image", img);
		namedWindow("Flipped Horizontally", WINDOW_NORMAL);
		imshow("Flipped Horizontally", flipped_horizontal);
		namedWindow("Flipped Vertically", WINDOW_NORMAL);
		imshow("Flipped Vertically", flipped_vertical);
		namedWindow("Flipped Center", WINDOW_NORMAL);
		imshow("Flipped Center", flipped_center);

	waitKey(0);
	destroyAllWindows();

	return 0;
}

代码解释
1. 加载图像:使用 imread 函数加载图像。
2. 初始化输出矩阵:创建新的矩阵来存储翻转后的图像。
3. 水平翻转:使用 flip 函数将图像沿水平轴翻转。
4. 垂直翻转:使用 flip 函数将图像沿垂直轴翻转。
5. 中心翻转:使用 flip 函数将图像沿中心翻转。
6. 显示结果:使用 imshow 函数显示原始图像以及翻转后的图像。

示例运行结果
当你运行上述程序时,将会看到以下几个窗口:
•Original Image:原始图像。
•Flipped Horizontally:沿水平轴翻转的图像。
•Flipped Vertically:沿垂直轴翻转的图像。
•Flipped Center:沿中心翻转的图像。

注意事项
•数据类型:确保输出图像的数据类型与输入图像相同。
•翻转方向:正确选择 flipCode 参数,以实现所需的翻转效果。
•内存管理:确保释放不再使用的图像资源,避免内存泄漏。

通过这些示例和详细解释,你应该能够理解如何在OpenCV中使用C++实现图像的镜像翻转。

运行结果1

在OpenCV中,使用C++进行图像处理时,如果你想对一个图像进行水平或者垂直镜像翻转,可以使用cv::flip函数。这个函数非常方便,只需要几行代码就可以完成操作。

示例代码2

下面是一个简单的示例代码,展示如何使用OpenCV的cv::flip函数来翻转图像:

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

int main(int argc, char** argv)
{
    if (argc != 2)
    {
        std::cout << "Usage: " << argv[0] << " <Image_Path>" << std::endl;
        return -1;
    }

    // 读取图像文件
    cv::Mat src = cv::imread(argv[1], cv::IMREAD_COLOR);
    if (!src.data)
    {
        std::cout << "Error: Image cannot be loaded!" << std::endl;
        return -1;
    }

    // 创建目标图像
    cv::Mat dst;

    // 水平翻转图像
    cv::flip(src, dst, 1); // 第二个参数为1时,沿y轴翻转(水平翻转)
    cv::imshow("Horizontal Flip", dst);
    cv::waitKey(0);

    // 垂直翻转图像
    cv::flip(src, dst, 0); // 第二个参数为0时,沿x轴翻转(垂直翻转)
    cv::imshow("Vertical Flip", dst);
    cv::waitKey(0);

    // 对角线翻转图像
    cv::flip(src, dst, -1); // 第二个参数为-1时,沿x轴和y轴翻转(对角线翻转)
    cv::imshow("Diagonal Flip", dst);
    cv::waitKey(0);

    return 0;
}

运行结果2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值