
数字图像处理
还是叫明
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
OpenCV实现二值图细化(骨架提取)
本文介绍了使用OpenCVSharp在C#中实现图像细化(骨架提取)的两种经典算法:Zhang-Suen算法和Guo-Hall算法。通过Mat对象处理二值图像,算法采用迭代方式将线条细化至单像素宽度。程序首先创建标记矩阵,然后根据不同的算法类型(thinningType参数为1或2)进行像素点8邻域分析,通过预定义的查找表决定是否删除当前像素。两种算法均通过交替迭代处理图像,直到不存在可删除像素为止。文章还展示了原始二值图与两种算法处理后的骨架提取效果对比图。原创 2025-06-20 10:12:52 · 404 阅读 · 0 评论 -
OpenCV根据模板图像寻找环境中的目标
该文介绍了一种基于图像匹配的目标定位方法。通过将模板图像转换为灰度图,提取关键点并进行匹配,利用单应性矩阵将模板投影到目标图像中,从而实现目标定位。实验结果表明,该方法能准确匹配目标位置,并附有多组测试图片及匹配效果展示。原创 2025-06-18 13:08:04 · 219 阅读 · 0 评论 -
使用ONNX模型实现M-LSD算法
摘要:本文介绍了使用C#和ONNX模型实现M-LSD直线检测算法的完整流程。通过OpenCvSharp处理图像,加载512x512的ONNX模型进行推理,提取直线段并绘制检测结果。代码包含图像预处理、模型输入输出处理、直线筛选和后处理等步骤,最终生成带有检测直线的结果图像。该实现可有效检测图像中的显著直线,适合各种计算机视觉应用场景。原创 2025-06-09 15:32:38 · 299 阅读 · 0 评论 -
OpenCV定位地板上的书
本文介绍了一种通过图像处理技术从复杂背景中识别书本的方法。首先,将彩色图片转换为HSV色彩空间,并提取S(饱和度)分量,以增强书本与背景的对比度。接着进行二值化处理,使书本区域更为明显。随后,应用形态学的开运算和闭运算,消除书本外的小物体并将书本区域连通。最后,生成轮廓并计算其外包矩形,从而准确框出书本位置。该方法有效解决了书本与背景颜色相近时的识别难题,提升了图像处理的精确度和效率。原创 2025-05-08 16:41:11 · 298 阅读 · 0 评论 -
OpenCV实验室工具的使用
例如下面的代码是图像平滑时使用的OpenCV函数,软件的输入参数可以帮助理解这个函数的使用。当打开一张彩色图时,可以先变成灰度图,然后二值化,再生成轮廓。OpenCV实验室包含了常见的图像处理和分析功能,包括色彩空间转换、滤波与卷积、图像优化、位置变换、图像分析、直方图、目标检测、图像分割、轮廓分析等。OpenCV实验室工具是一个调用OpenCV常见函数,让用户调整参数,快速得到试验结果的工具软件。软件界面中包含三列,第一列是功能菜单,第二列是实现某一功能时需要输入的参数,第三列是图像处理历史。原创 2025-04-27 14:25:04 · 392 阅读 · 0 评论 -
各种颜色空间的相互转换方法(RGB,HSV,CMYK,灰度)
各个颜色空间原始值的取值范围:CMYK:[0,1]灰度:[0,255]以下给出各个颜色空间转换的伪代码。原创 2025-04-10 15:44:44 · 560 阅读 · 0 评论 -
基于OpenCvSharp的数字图像处理 - 轮廓
我们在前面的章节里讲过边缘检测,本章所说的轮廓是基于边缘检测的。我们之前所做的边缘检测,结果只是基于像素的,而很多时候,我们可能需要对轮廓进行一些几何操作,例如分析区域是否连通,求出轮廓的凸包,判断一个点是不是在轮廓内,等等。我们先来看两种生成轮廓的方法,再看对轮廓的一些应用。一、从边缘得到轮廓虽然轮廓似乎就是边缘,但实际上,OpenCV只能从二值图得到轮廓,边缘被看成是非常窄的区域(宽1个像素)。所以,从边缘得到轮廓时,会出现两条轮廓基本相同,它们是边缘的内外。示例代码如下:Mat sr原创 2020-05-11 15:41:24 · 5186 阅读 · 1 评论 -
基于OpenCvSharp的数字图像处理 - 图像分割
图像分割是根据图像中各部分的特征,分割出不同的区域,这些区域可能代表了不同的物体。最简单的图像分割是区分出背景和前景。图像分割目前有一些比较成熟的技术,但想不通过一些辅助手段而达到比较好的分割效果,还是有一定难度的。一、漫水填充如果用过Photoshop的读者,应该对这项功能很熟悉。先设定一个阈值,然后在图像中的某个区域点一下鼠标,类似这个区域的像素都会被填充为某一颜色。这项功能需要我们指...原创 2020-05-06 16:37:39 · 5032 阅读 · 0 评论 -
基于OpenCvSharp的数字图像处理 - 图像优化
在直方图一章里提到的直方图均衡化就是一种图像优化的方法。本章再介绍图像修复和去噪两种方法。一、图像修复这里所介绍的图像修复是很简单的,就是用周边区域的像素填充损坏区域。代码如下:Mat src = new Mat(img_lenna_bad);//找出损坏区域Mat mask = new Mat(src.Size(), MatType.CV_8UC1, new Scalar(0...原创 2020-04-27 10:30:51 · 3119 阅读 · 3 评论 -
基于OpenCvSharp的数字图像处理 - 霍夫变换
霍夫变换最大的作用是检测图像中的直线。其原理是这样的:假设图像中有一条直线,其方程为y=kx+b。直线上有一个点,其坐标为(x1,y1)。显然,y1=kx1+b。如果我们把x、y看成是已知的,把k、b看成是未知数,有:b=-x1k+y1。我们发现,(x,y)坐标系上的一个点,对应了(k,b)坐标系上的一条直线。如果有另外一个点(x2,y2),则其必然对应(k,b)坐标系上的另一条直线。显然,(k,...原创 2020-04-27 09:16:41 · 1711 阅读 · 0 评论 -
基于OpenCvSharp的数字图像处理 - 直方图
直方图是对图像灰度信息的一个统计结果,直方图的分布能够反映图像的某些特征,可用于图像匹配。一、直方图提取图像直方图的代码如下:Mat src = new Mat(img_lenna, ImreadModes.Grayscale);Mat hist = new Mat();Cv2.CalcHist(new Mat[] { src }, new int[] { 0 }, new Ma...原创 2020-04-26 20:18:40 · 3626 阅读 · 3 评论 -
基于OpenCvSharp的数字图像处理 - 位置变换
平移、旋转、缩放、翻转、剪切等变换都属于仿射变换,而仿射变换又是透视变换的一种。所有仿射变换都可以用三个点到另外三个点去描述,而透视变换需要四个点。我们拍摄的图像里面,一般矩形的物体(例如纸张)都会变形,如果要转回规整的矩形,就要使用透视变换。在本教程中,使用的原图都是:一、翻转Mat src = new Mat(img_word);Mat map_x = new Mat...原创 2020-04-15 14:18:38 · 2694 阅读 · 0 评论 -
基于OpenCvSharp的数字图像处理 - 形态学
一、腐蚀形态学的内部算法依然是卷积,跟中值滤波一样,非线性。中值滤波取核范围的中位数,而腐蚀取最小值,膨胀取最大值。腐蚀看起来的效果是亮的区域被侵蚀,可用于一些噪声的去除。Mat src = new Mat(img_region, ImreadModes.Grayscale);Mat result = new Mat();Mat element = Cv2.GetStructur...原创 2020-04-15 09:07:29 · 2532 阅读 · 0 评论 -
基于OpenCvSharp的数字图像处理 - 二值化
一、二值化方法在OpenCvSharp,threshold函数专门用来对灰度图像进行二值化。给定一个阈值thresh,最大值maxval,函数在不同的二值化类型下,功能表现如下表所示:类型 >thresh <=thresh THRESH_BINARY maxval 0 THRESH_BINARY_INV 0 maxval THRE...原创 2020-04-14 16:24:08 · 7466 阅读 · 0 评论 -
基于OpenCvSharp的数字图像处理 - 锐化、边缘检测
一、Sobel算子Sobel算子是一阶导数的近似,分横向求导和纵向求导,其3阶算子为:实际运用时,我们可以把两次求导的结果按一定比例结合在一起。Mat src = new Mat(img_lenna, ImreadModes.Grayscale);Mat grad_x = new Mat();Mat grad_x2 = new Mat();Cv2.Sobel(src, g...原创 2020-04-14 15:20:03 · 4690 阅读 · 1 评论 -
基于OpenCvSharp的数字图像处理 - 模糊、平滑、去噪
这一章的模糊处理,以及下一章的锐化处理,其实绝大部分都是用一个核跟图像做卷积,使用的核不一样,效果就不一样。一、均值滤波均值滤波使用的核是全1核,再归一化。如五阶核:Mat src = new Mat(img_lenna, ImreadModes.Grayscale);Mat result = new Mat();Cv2.Blur(src, result, new OpenC...原创 2020-04-14 14:02:47 · 6298 阅读 · 0 评论 -
基于OpenCvSharp的数字图像处理 - 图像彩色类型转换
在计算机上存储的图像一般使用RGB彩色空间,但是在其他场合,我们可能需要其他的彩色空间。例如,在打印时,一般使用CMYK;在很多图像处理里,我们只需要用到图像的灰度信息,需要把图像转为灰度图;HSV空间是人眼更好理解的一个彩色空间,等等。一、转为灰度图Mat src = new Mat(img_lenna);Mat result = src.CvtColor(ColorConversi...原创 2020-04-14 10:44:06 · 3911 阅读 · 0 评论 -
基于OpenCvSharp的数字图像处理 - 像素操作
在OpenCvSharp里面,图像一般使用Mat对象存储。Mat即矩阵,矩阵的每一项是一个MatType结构。MatType有CV_16SC4、CV_8UC3、CV_8UC1等,可以看到,类型皆由四部分组成,定义如下:8 U C 3 每通道的字节数 每通道的数据类型 固定为C,指Channel 通道数 例如,一般的无透明彩色图,每一格像素包含了RGB...原创 2020-04-14 10:34:59 · 3117 阅读 · 0 评论 -
基于OpenCvSharp的数字图像处理 - 文件与显示
一、读写文件Mat src = new Mat(img_lenna);//默认是彩色图像//Mat src = new Mat(img_lenna, ImreadModes.Grayscale);//如果需要灰度图像src.SaveImage(img_result);二、显示图像在WPF项目里面,需要使用WriteableBitmap,直接作为Image的Source。在Ope...原创 2020-04-14 10:24:27 · 1700 阅读 · 0 评论 -
基于OpenCvSharp的数字图像处理 - 创建项目
OpenCV是一个不错的数字图像处理库,但它原生的开发语言是C++。要在C#项目里使用,需要经过一些转换。OpenCvSharp是一个不错的封装,接口跟OpenCV保持得很好。本教程的示例项目使用Visual Studio 2019开发,是一个WPF项目。1、创建一个WPF项目,.NET Framework版本选择4.6.1。2、Nuget程序包添加OpenCvSharp相关库。...原创 2020-04-14 09:35:18 · 1667 阅读 · 1 评论