用python手把手教你实现图片处理

2023-11-28 15:39:59 浏览数 (1)

1.OpenCV介绍

OpenCV(Open Source Computer Vision Library)是一个基于开源发行的跨平台计算机视觉库,它实现了图像处理和计算机视觉方面的很多通用算法,已成为计算机视觉领域最有力的研究工具。在这里我们要区分两个概念:图像处理和计算机视觉的区别:图像处理侧重于“处理”图像–如增强,还原,去噪,分割等等;而计算机视觉重点在于使用计算机来模拟人的视觉,因此模拟才是计算机视觉领域的最终目标。

功能与特点

OpenCV库包含了大量的图像和视频处理函数,可以用于各种计算机视觉任务,例如:

1.图像处理和分析:包括图像的读取、写入、显示、缩放、旋转、平移、剪裁、颜色空间转换、边缘检测、直方图均衡化、模板匹配、形态学操作等等。

2.目标检测和识别:包括人脸检测、物体检测、目标跟踪、姿态估计等等。

3.三维重建和立体视觉:包括立体匹配、立体视觉重建、深度估计、三维物体识别等等。

4.视频处理和分析:包括视频的读取、写入、播放、剪辑、稳定、跟踪、特征提取、背景建模等等。

OpenCV库的另一个特点是跨平台性。它支持多种操作系统,例如Windows、Linux、Mac OS等等。同时,它也支持多种编程语言,例如C 、Python、Java等等。这使得OpenCV可以轻松地集成到各种项目中,并可以在不同平台和语言之间进行无缝的交互和使用。

1.1 Python中调用OpenCV

在Python中使用OpenCV,可以使用cv2模块提供的接口。cv2模块对OpenCV库进行了封装和简化,使得到的代码更加简洁和易读,方便Python开发者使用OpenCV进行图像处理。

opencv安装

代码语言:javascript复制
pip install opencv-python

2.图像的几何变换概念

图像的几何变换是将一幅图像中的坐标映射到另外一幅图像中的新坐标位置,它不改变图像的像素值,只是改变像素所在的几何位置,使原始图像按照需要产生位置、形状和大小的变化。本文主要介绍图像的基本几何变换,包括图像的平移、镜像变换、转置和缩放等。

2.1 缩放

cv.resize(src, dsize,dst=None,fx=None, fy=None, interpolation=None)

功能:用来放大及缩小图像的函数。

参数:[输入图像,修改尺寸,输出图像,x方向缩放系数,Y 方向缩放系数,插值方式]

使用最近邻和双线性插值

代码语言:javascript复制

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt


def show(img):
    plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB), cmap='gray', vmin=0, vmax=255)
    plt.show()


img = cv.imread('2.jpeg')
img_resize1 = cv.resize(img, (330, 500), interpolation=cv.INTER_NEAREST)
img_resize2 = cv.resize(img, (330, 500), interpolation=cv.INTER_LINEAR)

show(img)
show(np.hstack([img_resize1, img_resize2]))

原始图片

处理结果图:

2.2 旋转

img_rotate = cv.rotate(img, cv.ROTATE_90_CLOCKWISE)

功能:对图像进行旋转变换(90°)

参数:rotate()旋转函数,将图像旋转90°。

代码语言:javascript复制
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt


def show(img):
    plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB), cmap='gray', vmin=0, vmax=255)
    plt.show()


img = cv.imread('2.jpeg')
#img_resize1 = cv.resize(img, (330, 500), interpolation=cv.INTER_NEAREST)
#img_resize2 = cv.resize(img, (330, 500), interpolation=cv.INTER_LINEAR)

# 旋转1
img_rotate = cv.rotate(img, cv.ROTATE_90_CLOCKWISE)
show(img_rotate)

show(img_rotate)

2.3 翻转

cv.flip(img,bool)

功能:对图像进行镜像变换。

参数:其中img表示变换的图像,flip()函数中bool为布尔值,可选0或1,0表示垂直镜像;1表示水平镜像;-1表示水平垂直同时进行。

采用flip()函数进行镜像翻转,其中1表示水平翻转,0表示竖直翻转,-1表示水平竖直同时进行。

代码语言:javascript复制
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt


def show(img):
    plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB), cmap='gray', vmin=0, vmax=255)
    plt.show()


img = cv.imread('2.jpeg')
#img_resize1 = cv.resize(img, (330, 500), interpolation=cv.INTER_NEAREST)
#img_resize2 = cv.resize(img, (330, 500), interpolation=cv.INTER_LINEAR)

# 镜像2
img_mirh = cv.flip(img, 1)
img_mirv = cv.flip(img, 0)
img_mirb = cv.flip(img, -1)
show(np.hstack([img, img_mirh, img_mirv, img_mirb]))

3.运行所需要环境

opencv安装

代码语言:javascript复制
pip install opencv-python

matplotlib安装

代码语言:javascript复制
pip install matplotlib

0 人点赞