OpenCV-Python 对图像的基本操作代码

 更新时间:2021年11月26日 10:38:36   作者:WSKH0929  
这篇文章主要介绍了OpenCV-Python 对图像的基本操作,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
# 设置兼容中文
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']
D:\Anaconda\AZWZ\lib\site-packages\numpy\_distributor_init.py:30: UserWarning: loaded more than 1 DLL from .libs:

D:\Anaconda\AZWZ\lib\site-packages\numpy\.libs\libopenblas.NOIJJG62EMASZI6NYURL6JBKM4EVBGM7.gfortran-win_amd64.dll

D:\Anaconda\AZWZ\lib\site-packages\numpy\.libs\libopenblas.WCDJNK7YVMPZQ2ME2ZZHJJRJ3JIKNDB7.gfortran-win_amd64.dll

  warnings.warn("loaded more than 1 DLL from .libs:\n%s" %

cv.__version__

'4.5.1'
rain = cv.imread('img/rain.jpg')[:500,:500,:]

view = cv.imread('img/view.jpg')

print(rain.shape)

print(view.shape)

(500, 500, 3)

(500, 500, 3)
plt.figure()

plt.subplot(1,2,1)

m1 = plt.imshow(rain[:,:,::-1])

plt.title('rain.jpg')

plt.subplot(1,2,2)

m2 = plt.imshow(view[:,:,::-1])

plt.title('view.jpg')
Text(0.5, 1.0, 'view.jpg')

在这里插入图片描述

1.图像的加法​

# cv加法
add_img = cv.add(rain,view)
plt.imshow(add_img[:,:,::-1])
<matplotlib.image.AxesImage at 0x1fdc2fed160>

在这里插入图片描述

# numpy 加法
add_img2 = rain + view
plt.imshow(add_img2[:,:,::-1])
<matplotlib.image.AxesImage at 0x1fdc2d4d4c0>

在这里插入图片描述

2.图像的混合

# 图像的混合(按照权重)
img3 = cv.addWeighted(rain,0.2,view,0.8,0)
plt.imshow(img3[:,:,::-1])
<matplotlib.image.AxesImage at 0x1fdc2f01a00>

在这里插入图片描述

3.图像的缩放

# 获取绝对尺寸 行,列
row,col = rain.shape[:2]

print("row:",row,",col:",col)

row: 500 ,col: 500

# 图像放大
res = cv.resize(rain,(2*row,2*col))
plt.figure()
plt.subplot(1,2,1)
m1 = plt.imshow(rain[:,:,::-1])
plt.title("放大前")
plt.subplot(1,2,2)
m2 = plt.imshow(res[:,:,::-1])
plt.title("放大后")

Text(0.5, 1.0, '放大后')

在这里插入图片描述

# 使用相对坐标 进行图像缩小
res2 = cv.resize(rain,None,fx=0.5,fy=0.5)
plt.figure()
plt.subplot(1,2,1)
m1 = plt.imshow(rain[:,:,::-1])
plt.title("缩小前")
plt.subplot(1,2,2)
m2 = plt.imshow(res2[:,:,::-1])
plt.title("缩小后")

Text(0.5, 1.0, '缩小后')

在这里插入图片描述

4.图像的平移

# 创建平移矩阵  x方向上平移100,y方向上平移50
M = np.float32([[1,0,100],[0,1,50]])
M

array([[  1.,   0., 100.],
       [  0.,   1.,  50.]], dtype=float32)

# cv.warpAffine(要平移的图形,平移矩阵,背景画布大小)
res = cv.warpAffine(rain,M,rain.shape[:2])

plt.figure()
plt.subplot(1,2,1)
m1 = plt.imshow(rain[:,:,::-1])
plt.title("平移前")
plt.subplot(1,2,2)
m2 = plt.imshow(res[:,:,::-1])
plt.title("平移后")

Text(0.5, 1.0, '平移后')

在这里插入图片描述

5.图像的旋转

row,col = rain.shape[:2]

# 生成旋转矩阵 getRotationMatrix2D(旋转中心坐标,旋转角度,缩放比例)
M = cv.getRotationMatrix2D((row/2,col/2),45,1)

# cv.warpAffine(要旋转的图形,旋转矩阵,背景画布大小)
res = cv.warpAffine(rain,M,(col,row))

plt.figure()
plt.subplot(1,2,1)
m1 = plt.imshow(rain[:,:,::-1])
plt.title("旋转前")
plt.subplot(1,2,2)
m2 = plt.imshow(res[:,:,::-1])
plt.title("旋转后")

Text(0.5, 1.0, '旋转后')

在这里插入图片描述

6.图像的仿射变换

pts1 = np.float32([[50,50],[200,50],[50,200]])
pts2 = np.float32([[100,100],[200,50],[100,250]])

M = cv.getAffineTransform(pts1,pts2)
M

array([[ 0.66666667,  0.        , 66.66666667],
       [-0.33333333,  1.        , 66.66666667]])

res = cv.warpAffine(rain,M,rain.shape[:2])

plt.figure()
plt.subplot(1,2,1)
m1 = plt.imshow(rain[:,:,::-1])
plt.title("仿射变换前")
plt.subplot(1,2,2)
m2 = plt.imshow(res[:,:,::-1])
plt.title("仿射变换后")

Text(0.5, 1.0, '仿射变换后')

在这里插入图片描述

7.图像的透射变换

pst1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
pst2 = np.float32([[100,145],[300,100],[80,290],[310,300]])

M = cv.getPerspectiveTransform(pst1,pst2)
M

array([[ 3.98327670e-01, -2.09876559e-02,  7.49460064e+01],
       [-1.92233080e-01,  4.29335771e-01,  1.21896057e+02],
       [-7.18774228e-04, -1.33393850e-05,  1.00000000e+00]])

res = cv.warpPerspective(rain,M,rain.shape[:2])

plt.figure()
plt.subplot(1,2,1)
m1 = plt.imshow(rain[:,:,::-1])
plt.title("透射变换前")
plt.subplot(1,2,2)
m2 = plt.imshow(res[:,:,::-1])
plt.title("透射变换后")

Text(0.5, 1.0, '透射变换后')

在这里插入图片描述

8.图像金字塔

# 上采样

img_up = cv.pyrUp(rain)
# 下采样

img_down = cv.pyrDown(rain)

plt.figure()

plt.subplot(1,3,1)

m1 = plt.imshow(rain[:,:,::-1])

plt.title("原图")

plt.subplot(1,3,2)

m2 = plt.imshow(img_up[:,:,::-1])

plt.title("上采样")

plt.subplot(1,3,3)

m2 = plt.imshow(img_down[:,:,::-1])

plt.title("下采样")
Text(0.5, 1.0, '下采样')

在这里插入图片描述

到此这篇关于OpenCV-Python 对图像的基本操作的文章就介绍到这了,更多相关OpenCV-Python图像操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用python构建WebSocket客户端的教程详解

    使用python构建WebSocket客户端的教程详解

    WebSocket是一种在客户端和服务器之间实现双向通信的协议,常用于实时聊天、实时数据更新等场景,Python提供了许多库来实现 WebSocket客户端,本教程将介绍如何使用Python构建WebSocket客户端,文中通过代码示例给大家介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • python编程使用协程并发的优缺点

    python编程使用协程并发的优缺点

    协程是一种用户态的轻量级线程,又称微线程。这篇文章主要介绍了python编程使用协程并发的优缺点,感兴趣的朋友跟随小编一起看看吧
    2018-09-09
  • python中绕过反爬虫的方法总结

    python中绕过反爬虫的方法总结

    在本篇文章里小编给大家整理的是一篇关于python中绕过反爬虫的方法总结内容,需要的朋友们可以参考下。
    2020-11-11
  • Python使用arrow库优雅地处理时间数据详解

    Python使用arrow库优雅地处理时间数据详解

    虽然Python提供了多个内置模块用于操作日期时间,但有的时候并不能满足我们的需求,所以下面这篇文章主要给大家介绍了关于Python使用arrow库如何优雅地处理时间数据的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-10-10
  • python sklearn包——混淆矩阵、分类报告等自动生成方式

    python sklearn包——混淆矩阵、分类报告等自动生成方式

    今天小编就为大家分享一篇python sklearn包——混淆矩阵、分类报告等自动生成方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python UDF 实现对csv批量md5加密操作

    python UDF 实现对csv批量md5加密操作

    这篇文章主要介绍了python UDF 实现对csv批量md5加密操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • pandas通过loc生成新的列方法

    pandas通过loc生成新的列方法

    今天小编就为大家分享一篇pandas通过loc生成新的列方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • 详解Python字典查找性能

    详解Python字典查找性能

    这篇文章主要为大家介绍了Python字典查找性能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助<BR>
    2021-12-12
  • 对Python通过pypyodbc访问Access数据库的方法详解

    对Python通过pypyodbc访问Access数据库的方法详解

    今天小编就为大家分享一篇对Python通过pypyodbc访问Access数据库的方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • 基于python的MD5脚本开发思路

    基于python的MD5脚本开发思路

    这篇文章主要介绍了基于python的MD5脚本,通过 string模块自动生成字典,使用permutations()函数,对字典进行全排列,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-03-03

最新评论