Opencv图像处理基础

图片的几何变换


图片剪切


图片在程序中表示就是一个矩阵,我们要想操作图片,只需要操作矩阵元素就可以了。图片的剪切案例,其实我们只需要想办法截取出矩阵的一部分即可!

在python中,矩阵的截取是很容易的一件事!例如如下代码

mat[起始行号:结束行号,开始列号:结束列号]

在这里插入图片描述

import cv2

# 读取图片
img = cv2.imread('./timg.jpg', cv2.IMREAD_COLOR)
cv2.imshow('pic', img)

# 从图片中(230,230)截取一张 宽度为130,高度为70的图片 [起始行号:结束行号,开始列号:结束列号]
dstImg = img[180:280, 180:310]
# 显示图片
cv2.imshow('result', dstImg)
cv2.waitKey(0)
cv2.destroyAllWindows()

图片镜像处理


图片的镜像处理其实就是将图像围绕某一个轴进行翻转,形成一幅新的图像. 我们经常可以通过某个小水坑看到天空中的云, 只不过这个云是倒着的! 这个就是我们称为的图片的镜像!

下面我们来看这样一个示例吧!我们将lena这张图片沿着x轴进行了翻转
在这里插入图片描述
如果我们想在一个窗口中显示出两张图片,那么我们就需要知道图片的宽高信息啦!

如何获取呢? 看下面的示例代码:

imgInfo = img.shape
imgInfo[0] : 表示高度
imgInfo[1] : 表示宽度
imgInfo[2] : 表示每个像素点由几个颜色值构成   

知道了上述信息之后,我们就可以按照如下步骤实现啦!

实现步骤:

  1. 创建一个两倍于原图的空白矩阵
  2. 将图像的数据按照从前向后,从后向前进行绘制

代码实现:

import cv2
import numpy as np

img = cv2.imread('./timg.jpg', cv2.IMREAD_COLOR)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]

# 创建一个俩倍于原图大小的矩阵
dstImg = np.zeros((height * 2, width, 3), np.uint8)

# 向目标矩阵中填值
for row in range(height):
    for col in range(width):
        # 上半部分直接远扬填充
        dstImg[row, col] = img[row, col]
        # 下半部分倒叙填充
        dstImg[height * 2 - row - 1, col] = img[row, col]

cv2.imshow('result', dstImg)
cv2.waitKey(0)
cv2.destroyAllWindows()

图片缩放


对于图片的操作,我们经常会用到,放大缩小,位移,还有旋转,在接下来的课程中,我们将来学习这些操作!

首先,我们来看一下图片的缩放

关于图片的缩放,常用有俩种:

  1. 等比例缩放
  2. 任意比例缩放

要进行按比例缩放,我们需要知道图片的相关信息,我们可以通过一下操作:

imgInfo = img.shape
imgInfo[0] : 表示高度
imgInfo[1] : 表示宽度
imgInfo[2] : 表示每个像素点由几个颜色值构成   

图片缩放的常见算法:

  1. 最近领域插值
  2. 双线性插值
  3. 像素关系重采样
  4. 立方插值

默认使用的是双线性插值法,这里我给出利用opencv提供的resize方法来进行图片的缩放

import cv2

# 读取一张图片
img = cv2.imread('./timg.jpg', cv2.IMREAD_COLOR)
# 获取图片信息
imgInfo = img.shape
print(imgInfo)
# 获取图片的高度
height = imgInfo[0]
# 获取图片的宽度
width = imgInfo[1]
# 获取图片的颜色模式,表示每个像素点由3个组成
mode = imgInfo[2]
print(mode)

# 定义缩放比例
newHeight = int(height * 0.5)
newWidth = int(width * 0.5)
# 使用api缩放
newImg = cv2.resize(img, (newWidth, newHeight))
# 将图片展示出来
cv2.imshow('result', newImg)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值