opencv 常用操作指南

news2024/9/21 20:51:17

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 / gamma
   table = np.array([((i / 255.0) ** invGamma) * 255
      for 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.coloradmin.cn/o/1245213.html

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

相关文章

适用于电脑的5个免费文件恢复软件分享

适用于电脑的最佳免费文件恢复软件 任何计算机用户都可能经历过丢失重要文件的恐惧。重要数据的丢失可能会令人不安和沮丧,无论是由于不小心删除、计算机故障还是硬盘格式化造成的。幸运的是,在数字时代,您可以使用值得信赖的解决方案检索这些…

KT404A远程更换语音芯片方案支持OTA 4G 蓝牙 wifi 物联网

目录 一、简介 2.1 芯片的硬件 2.2 测试的方法 一、简介 KT404A远程更换语音芯片方案支持OTA 4G 蓝牙 wifi 物联网 在线下载的mp3语音芯片ic,通过KT404A的uart直接更换内部的语音文件,从而实现动态的更新语音内容 物联网大潮的来袭。随着智能家居、…

linux下磁盘分区、挂载实操

文章目录 一、磁盘分区1.查看磁盘分区情况2.使用fdisk进行分区(2T以下)3.删除分区4.使用parted对磁盘进行分区(大于2T) 二、磁盘格式化1.格式化文件系统2.关闭文件系统自检3.禁止检查磁盘文件系统,开机修复错误 三、磁…

Vim 一下日志文件,Java 进程没了?

一次端口告警,发现 java 进程被异常杀掉,而根因竟然是因为在问题机器上 vim 查看了 nginx 日志。下面我将从时间维度详细回顾这次排查,希望读者在遇到相似问题时有些许启发。 时间线 15:19 收到端口异常 odin 告警。 状态:P1故障 名称:应用端…

win10戴尔电脑安装操作系统遇到的问题MBR分区表只能安装GPT磁盘

首先按F2启动boot管理界面 调整启动盘的启动顺序,这里启动U盘为第一顺序。 第一步 选择安装程序的磁盘 第二步 转换磁盘为GPT磁盘 一般出现 磁盘0和1,说明存在两个盘 ,这里两个盘不是说的是C盘和D盘的问题,而是在物理上实际存在…

记一次docker服务启动失败解决过程

环境:centos 7.6 报错:start request repeated too quickly for docker.service 由于服务器修复了内核漏洞,需要重启,没想到重启后,docker启动失败了 查看状态 systemctl status docker如下图 里面有一行提示&…

java游戏制作-王者荣耀游戏

一.准备工作 首先创建一个新的Java项目命名为“王者荣耀”,并在src下创建两个包分别命名为“com.sxt"、”com.stx.beast",在相应的包中创建所需的类。 创建一个名为“img”的文件夹来储存所需的图片素材。 二.代码呈现 package com.sxt;import javax.sw…

V2X全方位通信部署解决方案如何支持智能交通建设?

背景介绍 后疫情时代人们更注重于享受当下,掀起了一股“旅游热”。大批量游客的到来给旅游胜地带来更多的人气和收益的同时,也带来了一系列的交通问题:游客和当地人民不仅会面临停车困难、交通拥堵的烦恼,还会因为游客对交通环境…

【Java线程通信】一窥究竟

今天我们要聊一聊Java线程通信。如果你是一个Java开发者,那么你肯定知道线程是Java中的一个重要概念。线程是程序执行的最小单位,它可以独立运行,也可以与其他线程共享资源。那么,线程之间如何进行通信呢?这就是我们今…

【UE5】资源(Asset)

了解UE游戏的基本构成 资源(Asset): 在UE中,资源(Asset)是指游戏中使用到的各种素材,例如模型、纹理、材质、声音、动画、蓝图、数据表格、关卡等(通常以uasset结尾),他…

【开源】基于Vue.js的海南旅游景点推荐系统的设计和实现

项目编号: S 023 ,文末获取源码。 \color{red}{项目编号:S023,文末获取源码。} 项目编号:S023,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四…

微服务学习(十二):安装Minio

微服务学习(十二):安装Minio 一、简介 MinIO 是一款基于Go语言发开的高性能、分布式的对象存储系统。客户端支持Java,Net,Python,Javacript, Golang语言。MinIO系统,非常适合于存储大容量非结构化的数据,例如图片、视…

buck降压电路

一、Buck电路的拓扑结构 Buck是直流转直流的降压电路,下面是拓扑结构,作为硬件工程师,这个最好是能够记下来,了然于胸。 为啥要记下来,自然是因为这个电路太基础了,并且谁都会用到,更重要的一点,面试可能会考。。。 上图是个异步buck,同步buck就是将里面的二极管换成M…

栈和队列的OJ题--12.括号匹配

12.括号匹配 20. 有效的括号 - 力扣(LeetCode) 解题思路:该题比较简单,是对栈特性很好的应用,具体操作如下:循环遍历String中的字符,逐个取到每个括号,如果该括号是:1. …

ElasticSearch 7 SQL 详解

平时使用Elasticsearch的时候,会在Kibana中使用Query DSL来查询数据.每次要用到Query DSL时都基本忘光了,需要重新在回顾一遍,最近发现Elasticsearch已经支持SQL查询了(6.3版本以后),整理了下一些用法. 简介 Elasticsearch SQL是一个X-Pack组件,它允许针对Elasticsearch实时执…

java--static的应用知识:代码块

1.代码块概述 代码块是类的5大成分之一(成员变量、构造器、方法、代码块、内部类) 2.代码块分为两种: 2.1.静态代码块: ①格式:static{ } ②特点:类加载时自动执行,由于类只会加载一次,所以静态代码块…

【PPspliT】ppt转pdf-保留过渡动画

网址 http://www.maxonthenet.altervista.org/ppsplit.php 下载安装 使用 再次打开ppt,就能在上方的选项栏里头看到了:

增量有余、后劲不足,星途汽车10月份销量环比下降3.9%

撰稿|行星 来源|贝多财经 近日,奇瑞集团发布了10月销量月报。报告显示,奇瑞集团于2023年10月销售汽车20.03万辆,同比增长50.8%,单月销量首次突破20万辆;2023年前10个月的累计销量为145.36辆,同比增长41.6…

第二证券:北证50指数一枝独秀 短剧游戏概念股持续活跃

周三,沪深两市三大指数颤动调整,北证50指数“鹤立鸡群”,大涨超8%。到收盘,上证综指报3043.61点,跌0.79%;深证成指报9855.66点,跌1.41%;创业板指报1950.01点,跌1.73%。沪…

基于yolov2深度学习网络的喝水行为检测系统matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、YOLOv2网络原理 4.2、基于YOLOv2的喝水行为检测 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 clc; clear; close all; warning off;…