opencv:图像的基本变换

本文介绍了OpenCV中图像的基本变换,包括图像的平移、缩放、旋转、翻转、错切、仿射变换和透视变换。详细阐述了各种变换的原理和实现代码,帮助理解图像坐标系和像素映射关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0.概述

图像变换的基本原理都是找到原图和目标图的像素位置的映射关系,这个可以用坐标系来思考,在opencv中,
图像的坐标系是从左上角开始(0,0),向右是x增加方向(cols),向下时y增加方向(rows)。

普通坐标关系:

图像坐标关系:

1.图像的平移

图像的平移是比较简单的映射关系,对于原图像的某个像素点位置(X0,Y0),向右平移100个像素的话,变换之后的目标像素点位置(X = X0+100,Y),然后用原图像的像素值填充目标位置就可,因此我们需要将这种映射关系转换一下,方便获得原图像素值,也就是X0 = X-100,这里X是已知的。

具体代码如下:

void translation(cv::Mat & src, cv::Mat & dst, int dx, int dy)
{
    const int rows = src.rows; // 获得原图的高度(y)
    const int cols = src.cols; // 获得原图的宽度(x)
    
    dst.create(rows, cols, src.type()); // 按照原图大小和格式创建一个空白图
    
    Vec3b *p; 
    for (int Y = 0; Y < rows; ++Y) // 按行扫描
    {
        p = dst.ptr<Vec3b>(Y);

        for (int X = 0; X < cols; ++X)
        {
            int X0 = X - dx; // 逆映射关系,求得原图的位置
            int Y0 = Y - dy;
            if (X0 >= 0 && Y0 >= 0 && X0 < cols && Y0 < rows) // 防止越界
            {
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值