自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(153)
  • 收藏
  • 关注

原创 OpenCV 笔记(32):图像处理的傅里叶变换——初探

在图像处理中,图像可以用不同域来表示和分析。下面是几种最常用的域:空间域是指由图像像素组成的空间。时域是指图像随时间变化的域。对于动态图像,例如视频,时域表示图像帧随时间的变化。时域处理是指对图像序列进行操作,例如运动分析、视频压缩等。频域是将图像从空间域变换到频率域得到的表示。在频域中,图像被表示为一个二维复数矩阵,其中每个元素代表图像中某一特定频率分量的幅度和相位。图像的空间域、时域和频域是三...

2024-05-17 17:33:50 671

原创 使用 Kotlin Compose Desktop 开发的图像编辑器

一. 背景前段时间,我抽空用 Kotlin 开发了一款桌面端的图像编辑器,支持多平台。因为 Compose Desktop 本身支持多平台,所以这款图像编辑器可以支持 Mac 、Windows、Linux。做这款工具的初衷是方便自己,这几年在工作上经常跟图像打交道,所以自己需要一款图形化的工具来对图片进行编辑或者快速尝试一下算法的效果。二. 功能图像编辑器——Monica,github 地址:ht...

2024-05-06 19:24:41 240 2

原创 OpenCV 笔记(31):图像锐化算法——拉普拉斯锐化和 USM 锐化

1. 图像锐化和增强图像锐化是一种突出和加强图像中景物的边缘和轮廓的技术,使图像变得更加清晰。它通过增强图像的高频分量来减少图像中的模糊,增强图像细节边缘和轮廓,增强灰度反差,便于后期对目标的识别和处理。图像增强是改善图像质量的技术,包括图像锐化、去噪、对比度增强、色彩增强等。图像锐化是图像增强中的一种重要技术。图像锐化和图像增强的区别在于,图像锐化侧重于突出图像中的细节,而图像增强则可以包括更...

2024-04-28 19:47:53 977

原创 Windows 下使用 CMake + Visual Studio 2022 编译 OpenCV 4.8.1 及其扩展模块

一. 背景目前维护的某个项目是在 Windows 下运行的,并且使用了 OpenCV 4.5.2 版本。我本地的开发环境是 Mac 并使用了比较新的 OpenCV 4.8.1 版本。为了和本地开发环境保持一致,我打算对项目中使用的 OpenCV 进行升级,因为该项目还是用了扩展模块的一些功能,所以需要自行编译。本文只是记录自己在编译时踩过的坑,避免下次再犯或者给有需要的人。二. 需要准备的软件CM...

2024-04-18 20:39:49 828 1

原创 OpenCV 笔记(30):图像降噪算法——非局部均值滤波

1. 非局部均值滤波非局部均值滤波(Non-Local Means,NL-Means)是一种非线性的图像去噪算法。它基于图像中的像素具有相似结构这一假设,利用图像的全局信息来对图像进行去噪。1.1 全局算法 VS 局部算法非局部均值滤波在计算每个像素点的估计值时,会考虑图像中所有与该像素点具有相似邻域结构的像素点。因此,非局部均值滤波是一种全局算法。那么相对于全局算法的局部算法是什么呢?局部算法...

2024-04-14 22:46:26 980

原创 OpenCV 笔记(29):图像降噪算法——高斯双边滤波、均值迁移滤波

边缘保留滤波(Edge Preserving Filter,EPF)是一种图像处理方法,其目的是在减少图像噪声的同时保留图像边缘的细节。它在许多应用中被广泛使用,包括图像增强、边缘检测和特征提取等。边缘保留滤波器通常通过平滑图像的方法来减少噪声。然而,与标准的平滑滤波器不同,边缘保留滤波器会考虑到图像中存在的边缘信息,并尽量避免对边缘进行模糊处理。因此,它能够减少噪声的同时保留图像中的边缘。边缘保...

2024-04-07 19:00:34 860

原创 OpenCV 笔记(28):图像降噪算法——中值滤波、高斯滤波

1. 图像噪声图像降噪(Image Denoising)是指从图像中去除噪声的过程,目的是提高图像质量,增强图像的视觉效果。图像噪声是指图像中不希望出现的随机亮度或颜色变化,通常会降低图像的清晰度和可辨识度,以及会降低图像的质量并使图像分析和理解更加困难。图像噪声主要有以下几个原因来产生的:光线不足:光线不足会导致光子噪声增加,从而降低图像的信噪比。电子元器件的热噪声:电子元器件在工作时会产生热...

2024-04-01 00:30:05 1141

原创 OpenCV 笔记(27):图像的卷积与滤波

1. 图像的卷积1.1 卷积卷积是一种数学运算,它将两个函数(或矩阵)结合起来,生成一个第三个函数。在图像处理中,卷积通常用于将一个滤波器与图像进行运算。图像的滤波器是一种用于增强或抑制图像中特定特征的工具。它通常是一个小矩阵,定义了如何对图像中的像素进行操作。卷积在图像处理中有很多应用,包括图像平滑、图像锐化、边缘检测和图像分割。1.2 卷积的原理在泛函分析中,卷积(convolution),...

2024-03-24 22:22:40 644

原创 OpenCV 笔记(26):图像的透视变换

1. 图像的透视变换1.1 简介图像的透视变换(Perspective Transformation)是指将图像投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping)。透视变换是一种非线性变换,它可以将一个二维坐标系中的点映射到三维坐标系中的点,然后再将其投影到另一个二维坐标系中的点。透视变换可以改变图像中的形状,并可以模拟真实世界中的透视效果...

2024-03-13 15:28:03 630

原创 OpenCV 笔记(25):图像的仿射变换

1. 几何变换图像的几何变换是指将一幅图像中的坐标位置映射到另一幅图像中的新坐标位置,其实质是改变像素的空间位置,估算新空间位置上的像素值。几何变换不改变图像的像素值,只是在图像平面上进行像素的重新安排。以下是常用的几种几何变换:旋转:将图像旋转指定角度。缩放:按缩放因子调整图像大小,使其变大或变小。平移:将图像从当前位置移动到新位置。错切:沿特定轴倾斜图像。仿射变换:一个更广泛的类别,包括单个...

2024-03-09 22:11:52 977

原创 OpenCV 笔记(24):图像金字塔

1. 尺度空间和图像金字塔尺度空间是图像在不同尺度下的连续表示。其中最常见的是使用高斯核对图像进行卷积。高斯滤波可以平滑图像,从而消除图像中的细微细节。随着高斯滤波核尺度的增加,图像变得越来越平滑,直到只剩下最基本的特征。图像金字塔是尺度空间的一种具体实现方式。它是由一系列不同分辨率的图像组成,这些图像以金字塔的形状排列如下图所示。图像金字塔.png常见的图像金字塔有以下几种:高斯金字塔(Gau...

2024-02-29 09:43:57 562

原创 OpenCV 笔记(23):图像的缩放——图像的缩放——立方插值、Lanczos 插值算法

1. 立方插值立方插值算法也被称为双三次、双立方插值算法。1.1 三次插值 (Cubic Interpolation)先介绍一下三次插值算法,它是一种使用三次多项式拟合一组数据的插值方法。三次插值通常用于图像缩放和重采样。三次插值的实现方式有很多种,例如牛顿多项式插值、拉格朗日多项式插值、Hermite 三次多项式插值、三次样条插值,每种方式都有其自身的优点和复杂性。插值多项式的形式牛顿多项式插...

2024-02-23 10:50:46 1227

原创 OpenCV 笔记(22):图像的缩放——最近邻插值、双线性插值算法

1. 图像缩放1.1 简介图像缩放是指通过增加或减少像素来改变图像尺寸的过程,是图像处理中常见的操作。图像缩放会涉及效率和图像质量之间的权衡。图像放大(也称为上采样或插值)的主要目的是放大原图像,以便在更高分辨率的显示设备上显示。但是,放大图像并不能带来更多信息,因此图像质量会不可避免地受到影响。图像缩小(也称为下采样)的主要目的是减小图像尺寸,以便更有效地存储或传输。缩小图像可以保留更多信息,但...

2024-02-14 14:46:54 1458

原创 OpenCV 笔记(21):图像色彩空间

1. 图像色彩空间图像色彩空间是用于定义颜色范围的数学模型。它规定了图像中可以使用的颜色以及它们之间的关系。它决定了图像中可以显示的颜色范围。不同的色彩空间可以包含不同的颜色范围,因此选择合适的色彩空间对于确保图像在不同设备上看起来一致非常重要。图像色彩空间的意义主要体现在以下几个方面:统一颜色标准:色彩空间提供了一种统一的颜色标准,使得不同设备之间能够相互理解和交流颜色信息。确保颜色一致性:色...

2024-02-08 21:03:04 1258

原创 OpenCV 笔记(20):霍夫圆检测

1. 霍夫圆变换霍夫圆变换(Hough Circle Transform)是一种数字图像处理中的特征提取技术,用于在图像中检测圆形。它将二维图像空间中一个圆转换为该圆半径、圆心横纵坐标所确定的三维参数空间中一个点的过程。因此,圆周上任意三点所确定的圆,经霍夫变换后在三维参数空间应对应一点。霍夫圆变换的优点:通用性强,可以检测任意大小、形状的圆形。效率高,可以快速检测出图像中的圆形。霍夫圆变换的缺...

2024-02-04 15:58:09 2092 1

原创 OpenCV 笔记(19):霍夫直线检测

1. 霍夫空间和霍夫变换1.1 霍夫空间霍夫空间(Hough space)是一种用于图像分析的特征空间,用于描述图像中具有相同形状的线段或曲线。霍夫空间是指将图像空间中的点映射到参数空间后形成的空间。参数空间的维度由形状的描述参数的个数决定。例如,对于直线检测,参数空间的维度为 2,其中一个维度表示直线的斜率,另一个维度表示直线的截距。对于圆检测,参数空间的维度为 3,这三个参数分别是圆心坐标和...

2024-01-28 20:26:18 711

原创 OpenCV 笔记(18):轮廓的更多属性

该系列文章前面几篇介绍了轮廓以及其矩特征、几何特征等等。本文会介绍轮廓更多的属性,它们可用于识别和分类物体、测量形状和分析图像。1. 长宽比长宽比是轮廓的宽度与高度的比值。它可以用于识别物体的形状。2. 矩形度矩形度是轮廓区域面积与其最小外接矩形区域面积的比值。它是衡量轮廓与矩形相似程度的一个参数。3. 范围范围是轮廓区域面积与其外接矩形区域面积的比值。它可以用于衡量轮廓的大小。下面的例子是...

2024-01-21 12:28:02 409

原创 OpenCV 笔记(17):轮廓的椭圆拟合、直线拟合

1. 椭圆拟合轮廓的椭圆拟合是指用椭圆来近似轮廓的形状。当这个椭圆的长轴和短轴相等时,它就是一个圆。椭圆拟合的基本思路是:对于给定平面上的一组样本点,寻找一个椭圆,使其尽可能接近这些样本点。也就是说,将图像中的一组数据以椭圆方程为模型进行拟合,使某一椭圆方程尽量满足这些数据,并求出该椭圆方程的各个参数。椭圆拟合有以下几种常用方法:最小二乘法:最小二乘法是基于最小化拟合误差的思想,通过迭代的方法求...

2024-01-14 19:18:30 1387

原创 OpenCV 笔记(16):轮廓的几何特征

在该系列第十四篇文章中,介绍了很多轮廓的基础特征,包括面积、周长、质心、凸包等等,它们也都是轮廓的几何特征。本文主要介绍的是轮廓形状拟合。轮廓形状拟合是指通过数学模型来近似轮廓的形状。轮廓形状拟合有助于简化轮廓的表示,并提取轮廓的几何特征,所以它的作用如下:简化轮廓:可以使用简单的几何形状来近似复杂的轮廓,从而简化轮廓分析。提取形状特征:可以使用轮廓形状拟合来提取形状特征,例如轮廓的长宽比、面积、...

2024-01-08 11:45:13 1031

原创 OpenCV 笔记(15):轮廓的矩特征

矩(moment)是概率与统计中的一个概念,是随机变量的一种数字特征,是对变量分布和形态特点的一组度量。矩的定义如下:其中,f(x) 是随机变量的概率密度函数或概率质量函数,n 是正整数表示矩的阶数。矩可以用来描述变量的均值、方差、偏度、峰度等特性。矩的性质如下:零阶矩是变量的均值。一阶矩是变量的均方根。二阶矩是变量的方差。三阶矩是变量的偏度。四阶矩是变量的峰度。在图像处理中,图像的矩是指图像的...

2024-01-05 09:10:10 481

原创 OpenCV 笔记(14):图像的轮廓和轮廓的基础特征

Part11. 图像的轮廓在该系列第三篇文章中,曾经简单地介绍过轮廓和轮廓发现。11.1 轮廓的基本概念图像的轮廓是指图像中具有相同颜色或灰度值的连续点的曲线。轮廓和边缘是有联系的,边缘是轮廓的基础,轮廓是边缘的连续集合。轮廓和边缘的区别是:轮廓是连续的,边缘可以是连续的,也可以是离散的。轮廓是完整的,边缘可以是完整的,也可以是不完整的。轮廓可以有各种形状,边缘通常是线性的。21.2 轮廓发现和...

2023-12-29 18:58:12 923

原创 OpenCV 笔记(13):连通域分析

Part11. 图像的连通域以及连通域分析在该系列第六篇文章中,曾经介绍过连通的概念,下面再来回顾一下。连通:若 S 是图像中的一个像素子集,对于任意的 、。如果存在一条由 S 中像素组成的从 p 到 q 的通路,则称 p 在像素集 S 中与 q 连通。连通域是指具有相同属性的连通集合。例如,在一个二值图像中,具有相同像素值的区域构成一个连通域。所以,连通和连通域是两个不同的概念,连通域是连通的子...

2023-12-25 13:36:51 1292

原创 OpenCV 笔记(12):常用的边缘检测算子—— Canny

Part11. Canny 算子产生的背景一阶导数、二阶导数的边缘算子虽然简单易用,但存在一些缺点。例如容易受噪声影响,容易产生虚假边缘。John F. Canny 在 1986 年提出了 Canny 边缘检测算法。它是结合了梯度计算方法和非极大值抑制技术的一种边缘检测算法。该算法克服了之前的边缘检测算法在抑制噪声和保持边缘信息方面的缺陷,具有较好的性能。Canny 边缘检测算法的优点:能够有效地...

2023-12-18 13:46:51 991

原创 OpenCV 笔记(11):常用的边缘检测算子—— DoG

Part11. DoG 算子DoG(Difference of Gaussians)高斯差分是计算机视觉中一种用于图像增强和角点检测的算子。它是将两个不同尺度的高斯模糊图像进行差分得到的。高斯模糊可以平滑图像中的噪声和细节,而差分可以突出图像中的边缘和角点。DoG 算子利用这两个特性,在保留图像边缘和角点的同时,去除噪声和细节。DoG 在图像处理领域有着广泛的应用,例如:图像增强角点检测边缘检测...

2023-12-15 11:26:34 162

原创 OpenCV 笔记(10):常用的边缘检测算子—— Laplace、LoG

在该系列的第八篇文章中,我们曾介绍过一阶导数和二阶导数对分析边缘的结论:一阶导数通常在图像中产生较粗的边缘;二阶导数对精细细节,如细线、孤立点和噪声有较强的响应;二阶导数在灰度斜坡和灰度台阶过渡处会产生双边缘响应;二阶导数的符号可用于确定边缘的过渡是从亮到暗还是从暗到亮。一阶导数算子(例如 Sobel 算子)通过对图像求导来确定图像的边缘,数值绝对值较高的点对应了图像的边缘。如果继续求二阶导,原先...

2023-12-11 09:28:10 446

原创 OpenCV 笔记(9):常用的边缘检测算子—— Roberts、Prewitt、Sobel

在本文开始之前,我们先了解一下算子的概念。算子英语是 Operator,它是一个函数空间到函数空间上的映射 O:X→X。广义上的算子可以推广到任何空间。函数是从数到数的映射。泛函是从函数到数的映射。算子是从函数到函数的映射。算子不等同于函数,也不等同于算法。算法是更为广泛的概念,它包含了算子。Part11. Roberts 算子我们知道用 L1 范数来近似梯度的幅度:其中,在 x 方向,由偏导公式...

2023-12-04 09:28:34 686

原创 OpenCV 笔记(8):图像的边缘和梯度

Part11. 图像的边缘灰度图像的分割算法大多都基于两个性质:灰度的不连续性和灰度的相似性。对于不连续性的灰度,可以以灰度突变为基础分割一幅图像,比如通过图像的边缘,基于边缘进行图像分割。对于相似的灰度,可以通过区域进行图像分割。本文主要介绍图像边缘相关的内容和原理。图像的边缘是图像中亮度变化比较大的点。图像边缘点的出现一般是由于深度的不连续、物体表面方向的变换、物体属性变化或者场景照明变化引...

2023-11-27 09:28:55 139

原创 OpenCV 笔记(7):基于阈值的图像分割

Part11. 阈值分割图像分割是图像进行视觉分析和模式识别的基本前提,而阈值分割是最简单的图像分割方法。阈值分割是基于灰度值或灰度值的特性来将图像直接划分为区域,实现简单而且计算速度快。传统图像分割方法.png11.1 threshold() 函数的5种处理类型前面的文章提过,OpenCV 提供了基于灰度值的阈值分割函数 threshold(),在使用 threshold() 时先要将图像灰度...

2023-11-20 09:29:25 237

原创 OpenCV 笔记(6):像素间的基本关系——邻域、邻接、通路、连通、距离

像素是图像的基本元素,像素与像素之间存在着某些联系,理解像素间的基本关系是数字图像处理的基础。常见的像素间的基本关系包括:邻域、邻接、通路、连通、距离。Part11. 邻域邻域表示了像素之间的连接关系。像素(x,y)的邻域,是指与像素(x,y)对应的点的集合{(x+p,y+q)} ,其中 (p,q) 为一对有意义的整数。邻域是像素(x,y)附近像素形成的区域,像素 (x,y) 也被称为中心像素。最...

2023-11-14 00:02:50 2147

原创 OpenCV 笔记(5):二值图像的基本概念

Part11. 相关的基本概念初学者可能会对灰度图像和二值图像,以及图像灰度化和图像二值化这些词容易混淆。下面,对这些专业词汇分别做出详细的解释。二值图像(Binary Image)是指在图像中,灰度等级只有两种,图像中的任何像素点的灰度值均为0或者255,分别代表黑色和白色。通常在二值图像中,用白色像素表示对象的前景,用黑色像素表示对象的背景。从而实现将感兴趣的目标和背景分离。灰度图像(Gra...

2023-11-06 13:58:09 524

原创 OpenCV 笔记(4):图像的算术运算、逻辑运算

Part11. 图像的算术运算图像的本质是一个矩阵,所以可以对它进行一些常见的算术运算,例如加、减、乘、除、平方根、对数、绝对值等等。除此之外,还可以对图像进行逻辑运算和几何变换。我们先从简单的图像加、减、逻辑运算开始介绍。后续会有专门的内容介绍图像的几何变换等。11.1 图像加法图像的加法是将两个大小、类型相同的图像按照逐个像素进行相加,最后得到一个新的图像。图像的加、减、乘、除运算,都是两个...

2023-10-30 13:57:30 685

原创 OpenCV 笔记(3):基本图形的绘制

Part11. 绘制简单的图形绘图功能是 OpenCV 最基础的功能,OpenCV 提供了基础的绘制函数,用于帮助我们绘制一些基本的图形。通过这些函数的组合,我们也可以做一些高级的应用。11.1 绘制点和圆OpenCV 的绘制函数相对简单,而且很多参数很类似,所以介绍第一个函数时会详细地介绍各个参数的含义,后面就不做特别详细的介绍了。我们先来看点和圆的绘制:#include<opencv...

2023-10-23 14:30:39 295

原创 OpenCV 笔记(2):图像的属性以及像素相关的操作

Part11. 图像的属性11.1 Mat 的主要属性在前文中,我们大致了解了 Mat 的基本结构以及它的创建与赋值。接下来我们通过一个例子,来看看 Mat 所包含的常用属性。先创建一个 3*4 的四通道的矩阵,并打印出其相关的属性,稍后会详细解释每个属性的含义。MatsrcImage(3,4,CV_16UC4,Scalar_<uchar>(1,2,3,4));co...

2023-10-19 21:02:52 968

原创 OpenCV 笔记(1):图像的读取、显示、创建

Part11. 数字图像的含义OpenCV 中的图像,其实指的是数字图像。在介绍图像这个概念之前,先介绍几个基础的概念:像素(Pixel)是图像的基本单元或者基本元素,亦或者是图像最小的单位。图像中的像素点包含不同的像素值。对于灰白图像而言,像素值是介于0-255之间的值;对于拥有 RGB 3个通道的彩色图像而言,每个通道的像素值为0-255;对于二维黑白图片而言,这些像素点构成了一个二维矩阵;对...

2023-10-16 22:00:25 167

原创 OpenCV + Kotlin 实现 USB 摄像头(相机)实时画面、拍照

pexels-regina-trissteria-13623557.jpgPart1一. 业务背景我们团队前段时间做了一款小型的智能硬件,它能够自动拍摄一些商品的图片,这些图片将会出现在电商 App 的详情页并进行展示。基于以上的背景,我们需要一个业务后台用于发送相应的拍照指令,还需要开发一款软件(上位机)用于接收拍照指令和操作硬件设备。Part2二. 原先的实现方式以及痛点早期为了快速实现功能,...

2022-09-23 09:35:08 2837 2

原创 使用 Kotlin Compose Desktop 实现了一个简易的"手机助手"

1一. adbd-connectoradbd-connector 是一个实现 adb server 和 adb daemon 之间的通信协议的库,使用 Kotlin 编写。支持 PC 端直接连接 Android 设备操作 adb 相关的指令。github 地址:https://github.com/fengzhizi715/adbd-connector2二. 背景在下图中...

2022-06-27 09:06:19 2822

原创 Java 多线程模式 —— Guarded Suspension 模式

Part1Guarded Suspension 模式的介绍我们只从字面上看,Guarded Suspension 是受保护暂停的意思。1Guarded Suspension 模式在实际的并发编程中,Guarded Suspension 模式适用于某个线程需要满足特定的条件(Predicate)才能执行某项任务(访问受保护对象)。条件未满足时,则挂起线程,让线程一直处于 W...

2022-05-16 09:06:00 279

转载 使用 OpenCV + 微信二维码引擎实现二维码识别

Part1背景今年自疫情以来,我都没有写过文章。一方面是疫情导致居家办公比较烦躁,另一方面最近有点懒了。但是工作还是要继续,趁这几天优化了一下最近的项目,我整理了一下如何使用 OpenCV 和微信二维码引擎来实现二维码的识别。微信开源了其二维码的解码功能,并贡献给 OpenCV 社区。其开源的 wechat_qrcode 项目被收录到 OpenCV contrib 项目中...

2022-05-09 09:05:00 2296

原创 基于 Laplacian 实现简单的图像模糊检测

pexels-dinnow-9469740.jpgPart1业务背景从去年年底开始,我们团队一直在做一款能够给电商商品自动拍照的智能硬件。拍完照后,会将商品的套图在电商平台上进行展示。对于...

2021-12-06 09:30:00 1093

原创 基于 Kotlin + OkHttp 实现易用且功能强大的网络框架(一)

okhttp-extension 是针对 okhttp 3 增强的网络框架。使用 Kotlin 特性编写,提供便捷的 DSL 方式创建网络请求,支持协程、响应式编程等等。其 core 模块...

2021-11-22 09:30:00 3120

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除