【机器学习】OpenCV高级图像处理


鑫宝Code

🌈个人主页: 鑫宝Code
🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础
💫个人格言: "如无必要,勿增实体"


文章目录

  • OpenCV高级图像处理
    • 图像滤波
      • 线性滤波
        • 高斯滤波
        • 均值滤波
        • 双边滤波
      • 非线性滤波
        • 中值滤波
    • 图像金字塔
      • 高斯金字塔
      • 拉普拉斯金字塔
    • 图像分割
      • 阈值分割
      • 边缘检测
      • 轮廓处理
      • 分水岭算法
    • 特征检测与描述
      • Harris角点检测
      • SIFT特征检测与描述
      • SURF特征检测与描述
    • 图像变换
      • 傅里叶变换
      • 霍夫变换
      • 距离变换
    • 图像修复与增强
      • 去噪
      • 去雾

OpenCV高级图像处理

在掌握了OpenCV的基础知识之后,我们将深入探讨OpenCV在高级图像处理领域的应用。本文将介绍一些常用的高级图像处理技术,包括图像滤波、图像金字塔、图像分割、特征检测与描述、图像变换以及图像修复与增强。
在这里插入图片描述

图像滤波

图像滤波是图像处理中的一个基本操作,用于减少噪声、锐化边缘或提取特征。OpenCV提供了多种滤波算法,包括线性滤波和非线性滤波。
在这里插入图片描述

线性滤波

线性滤波是通过卷积操作实现的,其中卷积核定义了滤波器的性质。常用的线性滤波包括高斯滤波、均值滤波和双边滤波等。

高斯滤波

高斯滤波是一种常用的线性滤波方法,它使用高斯核对图像进行平滑。高斯核的权重由高斯函数决定,中心点的权重最大,远离中心点的权重逐渐减小。

G ( x , y ) = 1 2 π σ 2 e − x 2 + y 2 2 σ 2 G(x, y) = \frac{1}{2\pi\sigma^2}e^{-\frac{x^2 + y^2}{2\sigma^2}} G(x,y)=2πσ21e2σ2x2+y2

其中, ( x , y ) (x, y) (x,y)是像素坐标,而 σ \sigma σ是高斯核的标准差,决定了滤波的强度。

import cv2 as cv
import numpy as npimg = cv.imread('image.jpg')
blur = cv.GaussianBlur(img, (5, 5), 0)
均值滤波

均值滤波是一种简单的线性滤波方法,它用邻域内所有像素的平均值替换中心像素的值。这种方法可以有效消除高斯噪声,但会导致边缘模糊。

import cv2 as cv
import numpy as npimg = cv.imread('image.jpg')
blur = cv.blur(img, (5, 5))
双边滤波

双边滤波是一种边缘保留滤波,它不仅考虑像素之间的空间距离,还考虑像素值之间的相似性。这使得它能够有效平滑图像同时保留边缘细节。

import cv2 as cv
import numpy as npimg = cv.imread('image.jpg')
blur = cv.bilateralFilter(img, 9, 75, 75)

非线性滤波

非线性滤波是基于像素值的排序统计运算,而不是线性组合。常用的非线性滤波包括中值滤波、最大值滤波和最小值滤波等。

中值滤波

中值滤波是一种非线性滤波方法,它用邻域内像素值的中值替换中心像素的值。这种方法可以有效消除椒盐噪声,同时保留边缘细节。

import cv2 as cv
import numpy as npimg = cv.imread('image.jpg')
blur = cv.medianBlur(img, 5)

图像金字塔

图像金字塔是一种多尺度表示方法,它通过上采样或下采样生成一系列分辨率不同的图像。OpenCV提供了两种图像金字塔:高斯金字塔和拉普拉斯金字塔。
在这里插入图片描述

高斯金字塔

高斯金字塔是通过对原始图像进行连续的高斯平滑和下采样操作生成的。每一层的图像都是上一层图像的缩小版本,分辨率降低一半。

import cv2 as cv
import numpy as npimg = cv.imread('image.jpg')
g_pyr = [img]for i in range(6):img = cv.pyrDown(img)g_pyr.append(img)

拉普拉斯金字塔

拉普拉斯金字塔是通过高斯金字塔的相邻层之间的差值构建的。它保留了原始图像的边缘和细节信息,常用于图像合成和重建。

import cv2 as cv
import numpy as npimg = cv.imread('image.jpg')
g_pyr = [img]
l_pyr = []for i in range(6):img = cv.pyrDown(img)g_pyr.append(img)for i in range(5, -1, -1):l_pyr.append(cv.subtract(g_pyr[i], cv.pyrUp(g_pyr[i+1])))

图像分割

图像分割是将图像划分为多个独立区域的过程,每个区域具有相似的特征,如颜色、纹理或亮度。OpenCV提供了多种图像分割算法,包括阈值分割、边缘检测、轮廓处理和分水岭算法等。
在这里插入图片描述

阈值分割

阈值分割是一种简单的分割方法,它根据像素值与预设阈值的比较将图像划分为前景和背景。

import cv2 as cv
import numpy as npimg = cv.imread('image.jpg', 0)
_, thresh = cv.threshold(img, 127, 255, cv.THRESH_BINARY)

边缘检测

边缘检测是一种常用的图像分割技术,它通过检测图像中的边缘来分割对象。常用的边缘检测算子包括Sobel、Canny等。

import cv2 as cv
import numpy as npimg = cv.imread('image.jpg', 0)
edges = cv.Canny(img, 100, 200)

轮廓处理

轮廓是一个连续的点集,它描述了物体的形状。OpenCV提供了findContours()函数用于查找图像中的轮廓,并提供了一系列操作函数,如drawContours()contourArea()等。

import cv2 as cv
import numpy as npimg = cv.imread('image.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
_, thresh = cv.threshold(gray, 127, 255, cv.THRESH_BINARY)
contours, _ = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
cv.drawContours(img, contours, -1, (0, 255, 0), 2)

分水岭算法

分水岭算法是一种基于拓扑理论的图像分割方法,它将图像看作一个地形,并根据像素值的高低来模拟水流的流向,从而将图像划分为不同的区域。

import cv2 as cv
import numpy as npimg = cv.imread('image.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
_, thresh = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV + cv.THRESH_OTSU)
kernel = np.ones((3, 3), np.uint8)
opening = cv.morphologyEx(thresh, cv.MORPH_OPEN, kernel, iterations=2)
sure_bg = cv.dilate(opening, kernel, iterations=3)
dist_transform = cv.distanceTransform(opening, cv.DIST_L2, 5)
_, sure_fg = cv.threshold(dist_transform, 0.7 * dist_transform.max(), 255, 0)
sure_fg = np.uint8(sure_fg)
unknown = cv.subtract(sure_bg, sure_fg)
_, markers = cv.connectedComponents(sure_fg)
markers = markers + 1
markers[unknown == 255] = 0
markers = cv.watershed(img, markers)
img[markers == -1] = [255, 0, 0]

特征检测与描述

特征检测和描述是计算机视觉中的一个重要步骤,它用于提取图像中的关键点和描述符,以便进行后续的匹配、跟踪或识别任务。OpenCV提供了多种特征检测和描述算法,包括Harris角点检测、SIFT和SURF等。
在这里插入图片描述

Harris角点检测

Harris角点检测是一种基于图像梯度的角点检测算法,它可以检测出图像中的角点和边缘。

import cv2 as cv
import numpy as npimg = cv.imread('image.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
corners = cv.cornerHarris(gray, 2, 3, 0.04)
corners = cv.dilate(corners, None)
img[corners > 0.01 * corners.max()] = [0, 0, 255]

SIFT特征检测与描述

SIFT(Scale-Invariant Feature Transform)是一种常用的特征检测和描述算法,它可以提取图像中的关键点,并为每个关键点计算一个128维的描述符向量,具有尺度不变性和旋转不变性。

import cv2 as cv
import numpy as npimg = cv.imread('image.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
sift = cv.SIFT_create()
kp, des = sift.detectAndCompute(gray, None)
img = cv.drawKeypoints(img, kp, None)

SURF特征检测与描述

SURF(Speeded-Up Robust Features)是另一种常用的特征检测和描述算法,它比SIFT更快,但精度略低。SURF也可以提取关键点和计算描述符,具有一定的尺度不变性和旋转不变性。

import cv2 as cv
import numpy as npimg = cv.imread('image.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
surf = cv.xfeatures2d.SURF_create()
kp, des = surf.detectAndCompute(gray, None)
img = cv.drawKeypoints(img, kp, None)

图像变换

图像变换是指对图像进行几何或频域上的转换,以提取特征或改变图像的表示形式。OpenCV提供了多种图像变换算法,包括傅里叶变换、霍夫变换和距离变换等。
在这里插入图片描述

傅里叶变换

傅里叶变换是一种将图像从空间域转换到频域的方法,它可以用于图像滤波、图像重建和图像压缩等应用。OpenCV提供了dft()idft()函数来计算离散傅里叶变换及其逆变换。

import cv2 as cv
import numpy as npimg = cv.imread('image.jpg', 0)
dft = cv.dft(np.float32(img), flags=cv.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)
magnitude_spectrum = 20 * np.log(cv.magnitude(dft_shift[:, :, 0], dft_shift[:, :, 1]))

霍夫变换

霍夫变换是一种用于检测图像中直线或圆形等几何形状的技术。它通过在参数空间中寻找累加器的局部最大值来检测这些形状。

import cv2 as cv
import numpy as npimg = cv.imread('image.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
edges = cv.Canny(gray, 50, 150, apertureSize=3)
lines = cv.HoughLines(edges, 1, np.pi / 180, 200)
for line in lines:rho, theta = line[0]a = np.cos(theta)b = np.sin(theta)x0 = a * rhoy0 = b * rhox1 = int(x0 + 1000 * (-b))y1 = int(y0 + 1000 * (a))x2 = int(x0 - 1000 * (-b))y2 = int(y0 - 1000 * (a))cv.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)

距离变换

距离变换是一种计算图像中每个像素到最近的非零像素的距离的方法。它常用于图像分割、骨架提取和形状分析等应用。

import cv2 as cv
import numpy as npimg = cv.imread('image.jpg', 0)
_, thresh = cv.threshold(img, 127, 255, cv.THRESH_BINARY_INV)
dist_transform = cv.distanceTransform(thresh, cv.DIST_L2, 5)

图像修复与增强

图像修复和增强是指对图像进行处理,以提高图像质量或修复图像缺陷。OpenCV提供了多种图像修复和增强算法,包括去噪、去雾和超分辨率等。

去噪

去噪是指从图像中去除噪声,以提高图像质量。OpenCV提供了多种去噪算法,如高斯滤波、中值滤波和非局部均值滤波等。

import cv2 as cv
import numpy as npimg = cv.imread('image.jpg')
dst = cv.fastNlMeansDenoisingColored(img, None, 10, 10, 7, 21)

去雾

去雾是指从图像中去除由于大气环境造成的雾霾效应,以提高图像的对比度和清晰度。OpenCV提供了基于暗通道先验的去雾算法。

import cv2 as cv
import numpy as npimg = cv.imread('image.jpg')
haze_removal = cv.dehaze(img.copy())

End

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

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

相关文章

一文带你快速了解GPT 最新模型 o1!国内直接使用 !

一、GPT-o1简介 北京时间9月13日午夜,OpenAI 正式公开一系列全新 AI 大模型,旨在专门解决难题。这是一个重大突破,新模型可以实现复杂推理,一个通用模型解决比此前的科学、代码和数学模型能做到的更难的问题,OpenAI 发…

【Unity杂谈】iOS 18中文字体显示问题的调查

一、问题现象 最近苹果iOS 18系统正式版推送,周围升级系统的同事越来越多,有些同事发现,iOS 18上很多游戏(尤其是海外游戏)的中文版,显示的字很奇怪,就像一些字被“吞掉了”,无法显示…

微信如何发布学生查分?教师平台推荐!

学校和老师们都在面临着一个共同的问题:如何高效、便捷地发布学生成绩查询信息?在这个数字化时代,传统的纸质通知和口头传达方式已经无法满足家长和学生的需求。幸运的是,有了易查分这样的在线工具,发布学生查分变得简…

李章虎律师捐资设立“前沿技术产业化专项基金”

随着新一轮技术革命和产业变革的加速演进,全球科技创新进入空前活跃的时期,以人工智能、大数据、区块链等为代表的前沿技术革命方兴未艾,全新的产业格局正在逐渐形成。为聚焦世界前沿技术商业转化应用发展,助力更多企业转型升级赋…

芯片封装是什么?芯片封装中芯片环氧胶的应用有哪些?

芯片封装是什么?芯片封装中芯片环氧胶的应用有哪些? 芯片封装是什么? 芯片封装是集成电路(IC)制造过程中的关键步骤,它包括以下几个要点: 功能与目的:封装为芯片提供物理保护&#…

【HarmonyOS 】编译报错:Install Failed: error: failed to install bundle

此问题是由于支付宝sdk兼容性造成的,目前只能删除支付宝sdk依赖,如下图所示操作,删除后需要点右上角的 Sync Now,并等待 Sync 结束 删除后还需要点右上角的 Sync Now,并等待 Sync 结束 uniapp解决方案: htt…

重磅首发!2024中国大模型行业应用前景及现状分析——建议收藏观看

本报告由深圳前瞻产业研究院、首钢基金CANPLUS联合华为云共同出品。 报告显示,2023年我国AI大模型行业规模已达到147亿元。AI大模型的行业应用及技术进步能有效提升各行业生产要素的产出效率,并提高了数据要素在生产要素组合中的地位。供给方面&#xf…

LY3315 SOT23-6 集成充电与电机驱动的控制芯片

想要更方便、高效地管理电池充电和驱动电机?那么LY3315是你理想的选择!LY3315是一款集成了锂电池充电管理模块、电机驱动模块、马达续流二极管、按键档位控制、保护模块的全集成电机驱动控制芯片。它不仅具备强大的功能,还具有超低的待机电流…

开始你的博客之旅:从零到一的详细指南

创建博客不仅是表达自我的方式,更是与世界分享知识、塑造个人品牌、甚至实现商业变现的强大工具。本文将详细介绍从确定主题到实际运营的每个步骤,帮助你顺利开启个人博客的旅程。 确定博客的主题和目标 在开始博客之前,首先要明确博客的主…

鸿蒙OpenHarmony【轻量系统芯片移植案例】标准系统方案之瑞芯微RK3568移植案例

标准系统方案之瑞芯微RK3568移植案例 ​本文章是基于瑞芯微RK3568芯片的DAYU200开发板,进行标准系统相关功能的移植,主要包括产品配置添加,内核启动、升级,音频ADM化,Camera,TP,LCD&#xff0c…

甜羊浏览器可以抖店多开自动回复

在当今数字化时代,电子商务平台如雨后春笋般涌现,其中抖音旗下的电商服务——抖店,凭借其庞大的用户基础和强大的社交属性,成为了众多商家的重要销售渠道。然而,随着业务规模的扩大,如何高效管理多个抖店账…

【软件测试】测试的岗位有哪些?

求职入口有很多:相关企业官网、求职软件、校招、公众号等等。 下面就在某招聘网站上看看测试有哪些岗位吧! 测试只是一个统称,在测试下面还有很多细分岗位。 但是测试的岗位主要分为以下俩个方面: 软件测试开发工程师&#xff…

VMware安装飞牛私有云fnOS并挂载小雅Alist实现异地远程访问

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【Bug解决】Nacos启动成功,但却无法访问(提示:无法访问此网站,192.168.10.88的响应时间过长)

项目场景: 在虚拟机上通过Docker创建Nacos容器,已经创建成功,查看Nacos启动日志也是成功。但通过端口号加8848/nacos(如:http://IP:8848/nacos)无法访问到Nacos管理页面。 愿意分析一: 先检查好…

C++:动态内存分配(new、delete 相比 malloc、free的优势)与运算符重载

动态内存分配与运算符重载 一、动态内存分配(一)内存的分类(二)动态内存分配函数(1)new 和delete 的使用(1)new 的原理(2)delete 的原理 2、 operator new与operator delete&#xf…

地图资源下载工具失效下载链接重新分享

今天发现地图资源工具下载链接被失效了,也不知道为啥!不过不影响啥,我再分享一下就行!请关注我的公众号及博客以便及时了解最新下载及更新信息!另外如遇到工具分享链接失效或不能下载的情况可私信我,我会第…

69.x的平方根 (Java)20240919

问题描述&#xff1a; java代码&#xff1a; class Solution {public int mySqrt(int x) {if (x < 2) {return x; // 0 和 1 的平方根分别是它们自己}int left 2; // 从2开始&#xff0c;因为0和1已经处理了int right x / 2; // 最大可能的平方根不会超过 x / 2int mid;w…

基于单片机的智能家居控制系统设计

本设计 基于WiFi的智能家居系统的设计&#xff0c;主要包括主控芯片、WiFi通讯模块、CO传感器、液位传感器、温度传感器、烟雾传感器、火焰传感器、蜂鸣器模块、继电器模块等。通过各传感器实时采集家里的环境&#xff0c;并将数据发送至单片机STM32F030C8T6&#xff0c;单片机…

97、prometheus之yaml文件

命令回顾 [rootmaster01 ~]# kubectl explain ingressKIND: Ingress VERSION: networking.k8s.io/v1DESCRIPTION:Ingress is a collection of rules that allow inbound connections to reachthe endpoints defined by a backend. An Ingress can be configured to givese…

Day.js时间插件的安装引用与常用方法大全

&#x1f680; 个人简介&#xff1a;某大型国企资深软件研发工程师&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码喽的自我修养&#x1f9…