深入学习Python+Opencv常用四种图像处理操作

作者:Rainbowman 时间:2023-02-22 12:28:27 

opencv图像处理(深度学习中常用的)

改变色彩空间: cv.cvtColor()

cv.cvtColor(img, flag)

  • img:原图像

  • flag:要改变的类型

常用的flag有:cv.COLOR_BGR2GRAY (BGR->GRAY)、cv.COLOR_BGR2HSV


img = cv.imread(r'E:\0_postgraduate\test.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
cv.imshow('img', img)
cv.imshow('img_gray', gray)
k = cv.waitKey(0)
if k & 0xFF == ord('q'):
   cv.destroyAllWindows()

深入学习Python+Opencv常用四种图像处理操作

我们可以看看flag都有哪些:


flags = [i for i in dir(cv) if i.startswith('COLOR_')]
print( flags )

改变图像大小:cv.resize()

cv.resize(img, (width, height))

  • img:原始图像

  • width:缩放后图像的宽度

  • height:缩放后图像的高度


img = cv.imread(r'E:\0_postgraduate\test.jpg')
img_resize = cv.resize(img, (500, 600))
cv.imshow('img shape: {} x {}'.format(img.shape[1], img.shape[0]), img)
cv.imshow('img_resize shape: {} x {}'.format(img_resize.shape[1], img_resize.shape[0]), img_resize)
k = cv.waitKey(0)
if k & 0xFF == ord('q'):
   cv.destroyAllWindows()

深入学习Python+Opencv常用四种图像处理操作

比如某些网络要求输入的图像必须是固定大小的:256 x 256这么大的,这时就可以用cv.resize()对大小不一的图像进行缩放。

二维卷积操作

cv.filter2D()+轨迹条动态控制图像参数:cv.createTrackbar()、cv.getTrackbarPos()

卷积操作是什么这里就不再介绍了。

cv.filter2D(img, -1, kernel)

  • img:原始图像

  • -1:这个参数应该是输出图像,没什么用,填-1就行

  • kernel:卷积核,一个二维数组

而至于cv.createTrackbar()、cv.getTrackbarPos(),这两个函数可以很方便的动态调节图像的参数,很直观地看到调节的效果:

cv.createTrackbar()

第一个参数是轨迹栏名称

第二个参数是它所属的窗口名称,

第三个参数是默认值,

第四个参数是最大值,

第五个参数是执行的回调函数每次轨迹栏值都会发生变化,即每次滑动轨迹条时都会调用该参数。

cv.getTrackbarPos()

第一个参数是滑动条名字,

第二个时所在窗口,

返回值是滑动条的数值


# cv.createTrackbar() 和 cv.getTrackbarPos()测试

def nothing(*arg):
   pass

img = cv.imread(r'E:\0_postgraduate\test.jpg')
img_original = img
cv.namedWindow('image_test')
cv.createTrackbar('kernel_width', 'image_test', 1, 30, nothing)
cv.createTrackbar('kernel_height', 'image_test', 1, 30, nothing)
while 1:
   w = cv.getTrackbarPos('kernel_width', 'image_test')
   h = cv.getTrackbarPos('kernel_height', 'image_test')
   print('w: {} h: {}'.format(w, h))
   if(w!=0 and h!=0):
       kernel = np.ones((w, h), np.float32)/(w*h)
       img = cv.filter2D(img_original, -1, kernel)
       cv.imshow('image_test', img)
   else:
       cv.imshow('image_test', img_original)
   k = cv.waitKey(5)
   if k & 0xFF == ord('q'):
       break
cv.destroyAllWindows()

深入学习Python+Opencv常用四种图像处理操作

深入学习Python+Opencv常用四种图像处理操作

深入学习Python+Opencv常用四种图像处理操作

常用模糊

常用的模糊有平均化模糊:cv.blur()和高斯模糊:cv.GaussianBlur()

(1) cv.blur()

平均化模糊cv.blur()就是让原始图像与一个全1的卷积核做卷积,然后将得到的值除以卷积核中像素的总个数,这么说太绕了,直接上图:

比如我选的卷积核为3x3大小,则原始图像要与如下的卷积核做卷积:

深入学习Python+Opencv常用四种图像处理操作

cv.blur(img, (weight, height))

  • img:原始图像

  • weight:卷积核的宽

  • height:卷积核的长

(2) cv.GaussianBlur()

高斯模糊是在平均化模糊基础上的改进,考虑了距离对于中心像素的影响:与中心像素距离越近的像素拥有越高的权重,其实超级简单。高斯模糊的原理可以参考:python实现高斯模糊及原理详解

cv.GaussianBlur(img, (weight, height), sigmaX, sigmaY)

  • img:原始图像

  • weight:卷积核的宽

  • height:卷积核的长

  • sigmaX:二维高斯函数x的偏差

  • sigmaY:二维高斯函数y的偏差

注意:

核的宽度和高度,应该是正数和奇数。我们还应该指定X和Y方向的标准偏差,分别为sigmaX和sigmaY。如果只指定sigmaX,sigmaY将被视为与sigmaX相同。如果两者都是零,则根据核大小计算。高斯模糊对去除图像中的高斯噪声非常有效。


img = cv.imread(r'E:\0_postgraduate\test.jpg')
img_blur = cv.blur(img, (5,5))
img_gaussian = cv.GaussianBlur(img, (5,5), 0)
cv.imshow('image_blur', img_blur)
cv.imshow('image_gaussian', img_gaussian)
k = cv.waitKey(0)
if k & 0xFF == ord('q'):
   cv.destroyAllWindows()

深入学习Python+Opencv常用四种图像处理操作

来源:https://blog.csdn.net/qq_44166630/article/details/121581548

标签:Python,Opencv,图像处理
0
投稿

猜你喜欢

  • PyQt5每天必学之创建窗口居中效果

    2022-02-16 19:03:49
  • .Net Core服务治理Consul使用服务发现

    2023-06-25 07:49:19
  • python实现精准搜索并提取网页核心内容

    2021-04-07 09:14:04
  • 实例详解Python中的numpy.abs和abs函数

    2023-03-09 08:06:38
  • 基于JavaScript实现回到页面顶部动画代码

    2024-05-25 15:17:28
  • python 3利用BeautifulSoup抓取div标签的方法示例

    2023-09-17 02:57:48
  • php下防止单引号,双引号在接受页面转义的设置方法

    2023-11-15 02:37:01
  • 如何使用Vue3设计实现一个Model组件浅析

    2024-04-27 15:57:19
  • python+rsync精确同步指定格式文件

    2023-09-18 06:51:26
  • MySql通过ip地址进行访问的方法

    2024-01-20 07:39:40
  • python通过apply使用元祖和列表调用函数实例

    2021-02-18 03:18:32
  • pandas 使用insert插入一列

    2023-03-24 23:51:40
  • 快速掌握如何使用SQL Server来过滤数据

    2009-01-15 13:27:00
  • Go如何优雅的使用字节池示例详解

    2024-02-10 21:10:17
  • python3 requests库文件上传与下载实现详解

    2021-10-10 15:31:07
  • Python实现12306自动抢火车票功能

    2022-11-19 04:02:38
  • Python super()函数使用及多重继承

    2022-10-06 19:21:37
  • Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法

    2021-05-14 01:15:57
  • 实例解析Python的Twisted框架中Deferred对象的用法

    2024-01-01 23:38:23
  • YOLOv5车牌识别实战教程(一)引言与准备工作

    2021-06-20 09:01:06
  • asp之家 网络编程 m.aspxhome.com