【OpenCV 基础知识 14】漫水填充算法

2024-05-24 01:44

本文主要是介绍【OpenCV 基础知识 14】漫水填充算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

void cvFloodFill (IplImage * img,         // 输入图像CvPoint    seedPoint,    // 种子点CvScalar newVal,       // 像素点被染色的值CvScalar loDiff = cvScalarAll(0),     // 染色边界判定CvScalar upDiff = cvScalarAll(0),     // 染色边界判定CvConnectedComp * comp = NULL,        // 填充区域统计属性int flags = 4,                        // 连通性,相关性等参数设置。CvArr * mask = NULL                   // 掩码区域
);
  • image 【输入/输出】 1或者3通道、 8bit或者浮点图像。仅当参数flags的FLOODFILL_MASK_ONLY标志位被设置时image不会被修改,否则会被修改。
  • mask 【输入/输出】 操作掩码,必须为单通道、8bit,且比image宽2个像素、高2个像素。使用前必须先初始化。Flood-filling无法跨越mask中的非0像素。例如,一个边缘检测的结果可以作为mask来阻止边缘填充。在输出中,mask中与image中填充像素对应的像素点被设置为1,或者flags标志位中设置的值(详见flags标志位的解释)。此外,该函数还用1填充了mask的边缘来简化内部处理。因此,可以在多个调用中使用同一mask,以确保填充区域不会重叠。
  • seedPoint 起始像素点
  • newVal 重绘像素区域的新的填充值(颜色)
  • rect 可选输出参数,返回重绘区域的最小绑定矩形。
  • loDiff 当前选定像素与其连通区中相邻像素中的一个像素,或者与加入该连通区的一个seedPoint像素,二者之间的最大下行差异值。
  • upDiff 当前选定像素与其连通区中相邻像素中的一个像素,或者与加入该连通区的一个seedPoint像素,二者之间的最大上行差异值。
  • flags flags标志位是一个32bit的int类型数据,其由3部分组成: 0-7bit表示邻接性(4邻接、8邻接);8-15bit表示mask的填充颜色;16-31bit表示填充模式(详见填充模式解释)
program cv_FloodFill;{$APPTYPE CONSOLE}
{$R *.res}usesSystem.SysUtils,ocv.highgui_c,ocv.core_c,ocv.core.types_c,ocv.imgproc_c,ocv.imgproc.types_c,uResourcePaths;// 填充函数,使用洪泛填充算法将指定的种子点开始的区域填充为指定颜色
procedure fill(src: pIplImage; seed: TCvPoint; color: TCvScalar); // = CV_RGB(255, 0, 0)
varcomp: TCvConnectedComp;
begin// 使用洪泛填充算法进行填充,填充颜色为指定的颜色,相邻像素颜色差异在固定范围内cvFloodFill(src, seed, color, cvScalarAll(10),cvScalarAll(10),@comp, CV_FLOODFILL_FIXED_RANGE + 8, 0);// 输出填充区域的面积信息WriteLn(Format('[filled area] %.2f', [comp.area]));
end;// 鼠标回调函数,用于处理鼠标事件
procedure myMouseCallback(event: Integer; x: Integer; y: Integer; flags: Integer; param: Pointer); cdecl;
Varimg: pIplImage;
begin// 将传递的参数转换为图像类型img := pIplImage(param);// 根据鼠标事件类型处理不同的操作case event ofCV_EVENT_MOUSEMOVE:; // 鼠标移动时无操作CV_EVENT_LBUTTONDOWN:begin// 鼠标左键按下时输出坐标信息WriteLn(Format('%dx%d', [x, y]));// 调用填充函数,以鼠标点击位置为种子点进行填充fill(img, CvPoint(x, y), CV_RGB(255, 0, 0));end;CV_EVENT_LBUTTONUP:; // 鼠标左键释放时无操作end;
end;// 图片文件名常量
Constfilename = cResourceMedia + 'cat2.jpg';Varsrc: pIplImage = nil;dst: pIplImage = nil;c: Integer;begintry// 加载图像src := cvLoadImage(filename);WriteLn(Format('[i] image: %s', [filename]));// 创建窗口并设置鼠标回调函数cvNamedWindow('original', 1);cvSetMouseCallback('original', myMouseCallback, src);// 进入主循环,显示图像,按下ESC键退出while true dobegincvShowImage('original', src);c := cvWaitKey(33);if (c = 27) thenbreak;end;// 释放图像资源和关闭窗口cvReleaseImage(src);cvReleaseImage(dst);cvDestroyAllWindows;excepton E: Exception doWriteLn(E.ClassName, ': ', E.Message);end;
end.

这篇关于【OpenCV 基础知识 14】漫水填充算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/997015

相关文章

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

基于Java实现模板填充Word

《基于Java实现模板填充Word》这篇文章主要为大家详细介绍了如何用Java实现按产品经理提供的Word模板填充数据,并以word或pdf形式导出,有需要的小伙伴可以参考一下... Java实现按模板填充wor编程d本文讲解的需求是:我们需要把数据库中的某些数据按照 产品经理提供的 word模板,把数据

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个