深入学习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()
我们可以看看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()
比如某些网络要求输入的图像必须是固定大小的: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()
常用模糊
常用的模糊有平均化模糊:cv.blur()和高斯模糊:cv.GaussianBlur()
(1) cv.blur()
平均化模糊cv.blur()就是让原始图像与一个全1的卷积核做卷积,然后将得到的值除以卷积核中像素的总个数,这么说太绕了,直接上图:
比如我选的卷积核为3x3大小,则原始图像要与如下的卷积核做卷积:
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()
来源:https://blog.csdn.net/qq_44166630/article/details/121581548


猜你喜欢
- configparser中默认值的设定在做某一个项目时,在读配置文件中,当出现配置文件中没有对应项目时,如果要设置默认值,以前的做法是如下的
- 前言传统 Web 开发方式常常需要编写繁琐乏味的重复性代码,不仅页面表现与逻辑实现的代码混杂在一起,而且代码编写效率不高。对于开
- 以下是一个类文件,下面的注解是调用类的方法注意:如果系统不支持建立Scripting.FileSystemObject对象,那么数据库压缩功
- 本文实例讲述了MySQL无法存储Emoji表情问题的解决方法。分享给大家供大家参考,具体如下:数据插入的时候报错:1366 - Incorr
- vue常用内置指令<!DOCTYPE html><html lang="en"><head
- 错误展示new_model = load_model(“model.h5”)报错:1、keras load_model valueError
- 环境Laravel 5.4原理在Laravel中,门面为应用服务容器中绑定的类提供了一个“静态”接口
- 这篇文章是为了对网络模型的权重输出,可以用来转换成其他框架的模型。import tensorflow as tffrom tensorflo
- 安装好Navicat之后可能会出现如下的错误:Client does not support authentication protocol
- 数据读取与保存Text文件对于 Text文件的读取和保存 ,其语法和实现是最简单的,因此我只是简单叙述一下这部分相关知识点,大家可以结合de
- 读取数据(Reading data)TensorFlow输入数据的方式有四种:tf.data API:可以很容易的构建一个复杂的输入通道(p
- JSON [ JavaScript Object Notation ]:JavaScript 对象表示法。它是一种轻量级的数据交换格式。 J
- 首先祝贺Echarts顺利的从Apache毕业,多了个响亮的名字:Apache ECharts,现在的官网地址在这里:传送门,首页相当的国际
- python 3.3 下载固定链接文件并保存。import urllib.requestprint ("downloading w
- 分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种
- 安装pyinstallerpip install pyinstaller制作项目的.spec文件 进入django项目所在路径,
- 目录urllib库urllib.request模块Request对象1 . 请求头添加2. 操作cookie3. 设置代理urllib.pa
- 我们大家都知道MySQL数据库在安装完之后,默认的MySQL数据库,其最大连接数为100,一般流量稍微大一点的论坛或网站这个连接数是远远不够
- 本文实例讲述了Python接收Gmail新邮件并发送到gtalk的方法。分享给大家供大家参考。具体实现方法如下:#!/usr/bin/env
- 1. 前言相信参与使用Oracle数据库进行项目开发、运维的同学常常被Oracle JDBC驱动的Maven依赖折磨。现在这一情况在今年二月