opencv 常用操作指南

1.通道交换

读取图像,然后将RGB通道替换成BGR通道,需要注意的是,opencv读取的图像默认是BGR。cv2.cvtColor函数可以参考Color Space Conversions

img = cv2.imread('imori.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
cv2.imwrite('answer.png', img)

2.灰度化(Grayscale)

灰度化的计算公式为:

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

3. 二值化(Thresholding)

将大于阈值的像素值令为255,否则令为0。cv2.threshold函数可以参考Miscellaneous Image Transformations

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, img = cv2.threshold(img, 128, 255, cv2.THRESH_BINARY)

4. 大津二值化算法(Otsu's Method)

大津算法是一种可以自动确定二值化中阈值的算法。https://docs.opencv.org/master/d7/d4d/tutorial_py_thresholding.html 该页面的"Otsu's Binarization"章节

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)

5. HSV变换

将使用HSV表示的图像的色相反转。需要注意的是色相(Hue)将颜色从0°到360°表示。HSV颜色模型可以参考https://baike.baidu.com/item/HSV/547122

img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 进行色相反转
img[:, :, 0] = (img[:, :, 0] + 180) % 360
img = cv2.cvtColor(img, cv2.COLOR_HSV2BGR)

6. 减色处理

将图像的值由 2563 压缩至 43 ,即RGB的值只取{32,96,169,224}

img = img // 64 * 64 + 32

7. 平均池化(Average Pooling)

将图像按照固定大小网格分割,网格内的像素值取网格内所有像素的平均值。关于池化的操作似乎在opencv中没找到,只找到了在skimage中的实现 https://stackoverflow.com/questions/42463172/how-to-perform-max-mean-pooling-on-a-2d-array-using-numpy

img = skimage.measure.block_reduce(img, (8, 8, 1), np.mean)

8. 最大池化(Max Pooling)

与平均池化类似

img = skimage.measure.block_reduce(img, (8, 8, 1), np.max)

9. 高斯滤波(Gaussian Filter)

使用高斯滤波器( 3×3 大小,标准差 �=1.3 )进行降噪处理。高斯滤波器将中心像素按照高斯分布加权平均进行平滑化。cv2.GaussianBlur函数可以参考OpenCV: Image Filtering。标准差 �=1.3 的8-紧邻高斯滤波器为:

img = cv2.GaussianBlur(img, (3, 3), 1.3)

10. 中值滤波(Median Filter)

使用中值滤波器( 3×3 大小)进行降噪处理。cv2.medianBlur函数可以参考OpenCV: Image Filtering

img = cv2.medianBlur(img, 3)

11. 均值滤波器

使用均值滤波器( 3×3 大小)进行降噪处理。cv2.blur函数可以参考OpenCV: Image Filtering

img = cv2.blur(img, (3, 3))

12. Motion Filter

motion滤波好像并没有直接可以调用,因此先定义一个卷积核kernel,再利用cv2.filter2D进行卷积。cv2.filter2D可以参考https://docs.opencv.org/master/d4/d86/group__imgproc__filter.html#ga27c049795ce870216ddfb366086b5a04

# 生成一个对角线方向的卷积核(kernel)
kernel = np.diag([1]*3) / 3
img = cv2.filter2D(img, -1, kernel)

motion滤波的效果可以参考https://docs.gimp.org/2.8/en/plug-in-mblur.html

13. MAX-MIN滤波器

MAX-MIN滤波器使用网格内像素的最大值和最小值的差值对网格内像素重新赋值。通常用于边缘检测。

erode和dilate都是形态学操作,分别相当于min滤波和max滤波,erode可以参考https://docs.opencv.org/master/d4/d86/group__imgproc__filter.html#gaeb1e0c1033e3f6b891a25d0511362aeb dilate可以参考https://docs.opencv.org/master/d4/d86/group__imgproc__filter.html#ga4ff0f3318642c4f469d0e11f242f3b6c

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kernel = np.ones((3,3))
img_max = cv2.dilate(img, kernel)
img_min = cv2.erode(img, kernel)
img = img_max - img_min

14. 差分滤波器(Differential Filter)

差分滤波器对图像亮度急剧变化的边缘有提取效果,可以获得邻接像素的差值。

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kernel_y = np.array([[0, -1, 0],[0, 1, 0],[0, 0, 0]])
img_y = cv2.filter2D(img, -1, kernel)
kernel_x = np.array([[0, 0, 0],[-1, 1, -0],[0, 0, 0]])
img_x = cv2.filter2D(img, -1, kernel)

15. Sobel滤波器

Sobel滤波器可以提取特定方向(纵向或横向)的边缘。sobel滤波器可以参考OpenCV: Image Filtering。滤波器按下式定义:

纵向:

横向:

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_x = cv2.Sobel(img, cv2.CV_64F, 1, 0)
img_y = cv2.Sobel(img, cv2.CV_64F, 0, 1)

16. Prewitt滤波器

Prewitt滤波器是用于边缘检测的一种滤波器,其函数可以参考https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.prewitt.html

纵向:

横向:

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_x = scipy.ndimage.prewitt(img, 1)
img_y = scipy.ndimage.prewitt(img, 0)

17. Laplacian滤波器

Laplacian滤波器是对图像亮度进行二次微分从而检测边缘的滤波器。https://docs.opencv.org/master/d4/d86/group__imgproc__filter.html#gad78703e4c8fe703d479c1860d76429e6

纵向:

横向:

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img = cv2.Laplacian(img,cv2.CV_64F)

18. Emboss滤波器

Emboss滤波器可以使物体轮廓更加清晰

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kernel = np.array([[-2, -1, 0], [-1, 1, 1], [0, 1, 2]])
img = cv2.filter2D(img, -1, kernel)

19. Log滤波器

LoG即高斯-拉普拉斯(Laplacian of Gaussian)的缩写,使用高斯滤波器使图像平滑化之后再使用拉普拉斯滤波器使图像的轮廓更加清晰。其函数可以参考https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.gaussian_laplace.html

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img = scipy.ndimage.gaussian_laplace(img, sigma=3)

20. 直方图绘制

绘制直方图显示不同数值的像素出现的次数。在 Matplotlib 中有 hist() 函数提供绘制直方图的接口。https://matplotlib.org/api/_as_gen/matplotlib.pyplot.hist.html

img = cv2.imread('imori_dark.jpg').astype(np.float)
plt.hist(img.ravel(), bins=255, rwidth=0.8, range=(0, 255))
plt.savefig("answer.png")

21. 直方图均衡化

直方图均衡化是一种增强图像对比度的方法,其主要思想是将一副图像的直方图分布变成近似均匀分布。其参考https://stackoverflow.com/questions/31998428/opencv-python-equalizehist-colored-image

img_yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)
# equalize the histogram of the Y channel
img_yuv[:,:,0] = cv2.equalizeHist(img_yuv[:,:,0])
# convert the YUV image back to RGB format
img_output = cv2.cvtColor(img_yuv, cv2.COLOR_YUV2BGR)

22. 伽马校正

伽马校正用来对照相机等电子设备传感器的非线性转换特性进行校正。如果图像鸳鸯显示在显示器上,画面就会显得很暗。伽马校正通过预先增大RGB值来排除显示器的影响,达到对图像修正的目的。其参考https://stackoverflow.com/questions/33322488/how-to-change-image-illumination-in-opencv-python/41061351

def adjust_gamma(image, gamma=1.0):invGamma = 1.0 / gammatable = np.array([((i / 255.0) ** invGamma) * 255for i in np.arange(0, 256)]).astype("uint8")return cv2.LUT(image, table)original = cv2.imread('imori_gamma.jpg')
gamma = 2.2                         
adjusted = adjust_gamma(original, gamma=gamma)
cv2.imwrite('answer.png', adjusted)

23. 常见的插值方法

包括双三次、双线性、最邻近插值。

img = cv2.imread('imori.jpg')
height, width = img.shape[:2]
new_height, new_width = int(height/2), int(width/2)
# 双三次
new_img = cv2.resize(img, (new_width, new_height), interpolation=cv2.INTER_CUBIC)
# 双线性
new_img = cv2.resize(img, (new_width, new_height), interpolation=cv2.INTER_LINEAR)
# 最邻近
new_img = cv2.resize(img, (new_width, new_height), interpolation=cv2.INTER_NEAREST)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/167683.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1|1111

1、指定在每天凌晨4:00将该时间点之前的系统日志信息(/var/log/messages )备份到目录下/backup,备份后日志文件名显示格式logfileYY-MM-DD-HH-MM 2、配置ssh免密登陆:客户端主机通过redhat用户基于秘钥验证方式进行远…

微服务实战系列之Nginx

前言 Nginx?写了那么多文章,为什么今天才轮到它的表演?那是因为它实在太重要了,值得大书特书,特别对待。 当我们遇到单点瓶颈,第一个idea是?Nginx; 当我们需要反向代理,…

机器学习/sklearn笔记:MeanShift

1 算法介绍 一种基于质心的算法通过更新候选质心使其成为给定区域内点的均值候选质心的位置是通过一种称为“爬山”技术迭代调整的,该技术找到估计的概率密度的局部最大值 1.1 基本形式 给定d维空间的n个数据点集X,那么对于空间中的任意点x的均值漂移…

C#,《小白学程序》第一课:初识程序,变量,数据与显示

曰:扫地僧练就绝世武功的目的是为了扫地更干净。 1 引言 编程只是一项技术,如包包子,不是什么高深的科学。 学习程序最不好的方法是先学习枯燥的语法。 学习程序主要是用代码解决问题。因此,我们抛开所有的语法与诸多废物&…

React项目中发生空白但不报错的原因分析和解决?

文章目录 前言组件渲染问题状态管理问题异步操作问题代码错误但未抛出异常如果我们使用的是chorme浏览器的话,可以下载一个开发者工具,例如下图:代码审查使用调试工具日志和输出检查外部依赖异步操作终极大法,不到万不得已不可以使…

python+gurobi求解线性规划、整数规划、0-1规划

文章目录 简单回顾线性规划LP整数规划IP0-1规划 简单回顾 线性规划是数学规划中的一类最简单规划问题,常见的线性规划是一个有约束的,变量范围为有理数的线性规划。如: 使用matlab的linprog函数即可求解简单的线性规划问题,可以参…

Python推导式

python推导式是一种独特的数据处理方式,可以从一个数据序列构建到另一个新的数据序列的结构体。 Python支持各种数据结构的推导式: 1. 列表(list)推导式 [表达式 for 变量 in 列表] [out_exp_res for out_exp in input_list] or …

【​用运算放大器设计恒流电流源电压4V-74V适应范围 ​】2021-11-29

缘由用运算放大器设计恒流电流源-编程语言-CSDN问答直流恒流源设计,要求用到运算放大器-硬件开发-CSDN问答求助恒流驱动电路,运放端口电压的问题? - 电路设计论坛 - 电子技术论坛 - 广受欢迎的专业电子论坛!(不能实现恒流坏的电路设计反面例子…

OpenCV快速入门:特征点检测与匹配

文章目录 前言一、角点检测1.1 角点特征1.1.1 角点特征概念1.1.2 角点的特点1.1.3 关键点绘制代码实现1.1.4 函数解析 1.2 Harris角点检测1.2.1 Harris角点检测原理1.2.2 Harris角点检测公式1.2.3 代码实现1.2.4 函数解析 1.3 Shi-Tomasi角点检测1.3.1 Shi-Tomasi角点检测原理1…

GIT,解决远程分支冲突

背景:当远程分支A 与maste 有冲突如何解决–此时无法在这两个版本之间merge 1、切换到master分支: git checkout master 2、更新master分支代码: git pull 3、再次切换到自己新建的分支: git checkout add_login_check_func 4、将…

SuperMap iDesktopX如何获取简单线的起终端点及坐标

作者:超图研究院技术支持中心-于丁 SuperMap iDesktopX如何获取简单线的起终端点及坐标 在GIS行业应用中,线数据的端点坐标有非常多的用处。 定位和可视化:线数据端点坐标可以用于定位和可视化线要素在空间中的位置。这对于地图制作、规划和…

初识Linux(1),看了这篇文章,妈妈再也不用担心我Linux找不到门了。

文章目录 前言1. ls 指令例如:只显示文件名属性ls显示文件详细属性 ls - l 该操作可以简写成ll查看隐藏文件ls -l -a 2.pwd例如:显示当前目录所处的路径类似于windows如下操作: 3.cd 指令例如:改变工作目录相当于windows如下操作 4.whoami 指…

html幸运大转盘抽奖(附源码)

文章目录 1.设计来源1.1 幸运大转盘 风格11.2 幸运大转盘 风格21.3 幸运大转盘 风格31.4 幸运大转盘 奖品效果1.5 幸运大转盘 活动未开始1.6 幸运大转盘 活动已结束1.7 幸运大转盘 图片源素材 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址&a…

Windows power shell for循环

有时候需要重复执行某个shell命令 for($i1;$i -lt 10;$i$i1){echo $i}如果是cmd for /l %i in (1,1,5) do echo %i

卷积神经网络(Inception V3)识别手语

文章目录 一、前言二、前期工作1. 设置GPU(如果使用的是CPU可以忽略这步)2. 导入数据3. 查看数据 二、数据预处理1. 加载数据2. 可视化数据3. 再次检查数据4. 配置数据集 三、构建Inception V3网络模型1.自己搭建2.官方模型 五、编译六、训练模型七、模型…

再生式收音机踩坑记

下载《A Simple Regen Radio for Beginners》这篇文章也有好几年了,一直没有动手,上周末抽空做了一个,结果相当令人沮丧,一个台也收不到,用示波器测量三极管振荡波形,只有在调节再生电位器R2过程中&#xf…

什么是合封芯片工艺,合封芯片工艺工作原理、应用场景、技术要点

芯片封装技术不断进步,其中合封芯片工艺作为一种先进的芯片封装技术,“超”广泛应用于各类电子设备中。 本文将从合封芯片工艺的工作原理、应用场景、技术要点等方面进行深入解读。 一、合封芯片工艺 合封芯片工艺是一种将多个芯片或不同的功能的电子模…

构造命题公式的真值表

构造命题公式的真值表 1:实验类型:验证性2:实验目的:3:逻辑联结词的定义方法4:命题公式的表示方法5:【实验内容】 1:实验类型:验证性 2:实验目的&#xff1a…

数据黑洞,正在悄悄吞噬你的门店业绩

互联网兴起以来,线下门店的数字化程度始终落后于线上。一个重要的原因是:线下信息不像线上那样简单、集中、易于统计。很多重要数据隐藏于「黑洞」之中,收集和分析成本极为高昂。这极大束缚了门店业绩的提升。 而反过来看,线下场景…

BGP联邦及路由反射器配置

需求 1 AS1存在两个环回,一个地址为192.168.1.0/24,该地址不能再任何协议中宣告 AS3存在两个环回,一个地址为192.168.2.0/24,该地址不能再任何协议中宣告 AS1还有一个环回地址为10.1.1.0/24,AS3另一个环回地址是11.1.1…