[OpenGL] 不规则区域的填充算法】的更多相关文章

不规则区域的填充算法 一.简单递归 利用Dfs实现简单递归填充. 核心代码: // 简单深度搜索填充 (四连通) void DfsFill(int x, int y) { || y < || x> || y>) { return; } ) { a[x][y] = ; DfsFill(x - , y); DfsFill(x + , y); DfsFill(x, y - ); DfsFill(x, y + ); } } 二.扫描线种子填充算法(四连通) 1. 种子点(x,y)入栈. 2. 栈…
实验题目:不规则区域的填充算法 实验目的:验证不规则区域的填充算法 实验内容:利用VC与OpenGL,实现不规则区域的填充算法. 1.必做:实现简单递归的不规则区域填充算法. 2.选做:针对简单递归算法栈空间占用太大的缺点,进行改进,实现基于扫描线的种子填充算法 实验要求: n       将坐标系网格在屏幕上画出来,每个像素点占据一个格点,用一个小实心圆圈表示. n       用鼠标点击的方式,绘制不规则区域的边界. n       种子填充算法,可用4联通或8联通任选一种. 以下是我用c+…
title: "openGL实现图形学扫描线种子填充算法" date: 2018-06-11T19:41:30+08:00 tags: ["图形学"] categories: ["C++"] 先上效果图 白色的起始种子点 代码 #include <GL/glut.h> #include <cmath> #include <set> #include <vector> #include <uni…
1 概要 在不规则区域内均匀分布点,这个需求初看可能不好理解.如果设想一下需求场景就比较简单了. 场景1:在某个地区范围内,例如A市区有100W人口,需要将这100W人口在地图上面相对均匀的标识出来. 场景2:某不规则场馆,需要均匀布置展位,快速生成展位示意图. 场景其他:规则的电线杆.移动基站等模拟生成. 2 设计方案 既然是要求相对均匀的分布,我想到了格网法,即将多边形分割成特定边长的正方形格子,每个格子的中心点作为分布点. 好处:得到的点是绝对均匀的. 难点:需要判断格子是否在多边形范围内…
CGA填充算法之种子填充算法 平面区域填充算法是计算机图形学领域的一个很重要的算法,区域填充即给出一个区域的边界 (也可以是没有边界,只是给出指定颜色),要求将边界范围内的所有象素单元都修改成指定的颜色(也可能是图案填充).区域填充中最常用的是多边形填色,本文讨论种子填充算法(Seed Filling)   如果要填充的区域是以图像元数据方式给出的,通常使用种子填充算法(Seed Filling)进行区域填充.种子填充算法需要给出图像数据的区域,以及区域内的一个点,这种算法比较适合人机交互方式进…
项目需要看了种子填充算法,改进了算法主要去除面积小的部分.种子填充算法分为两种,简单的和基于扫描线的方法,简单的算法如下描述(笔者针对的是二值图像): (1)从上到下,从左到有,依次扫描每个像素: (2)遇到一个非零数值压栈,并置原图像像素点值为0,面积初始化为1:否则,处理完毕. (3)对栈非空查找,如果非空弹出栈顶,检测4领域或8领域,如果非空压栈,并置原图像像素点为0,标示不在处理此点,面积加1:如果为空,停止: (4)判断面积是否大于给定阈值,小于的删掉,大于的把得到的所有像素点保存到目…
泛洪填充算法(Flood Fill Algorithm) 泛洪填充算法又称洪水填充算法是在很多图形绘制软件中常用的填充算法,最熟悉不过就是 windows paint的油漆桶功能.算法的原理很简单,就是从一个点开始附近像素点,填充成新 的颜色,直到封闭区域内的所有像素点都被填充新颜色为止.泛红填充实现最常见有四邻域 像素填充法,八邻域像素填充法,基于扫描线的像素填充方法.根据实现又可以分为递归与 非递归(基于栈). 在介绍算法的三种实现方式之前,首先来看一下测试该算法的UI实现.基本思路是选择一…
前言 漫水填充算法是用来标记一片区域的:设置一个种子点,然后种子点附近的相似点都被填充同一种颜色. 该算法应用性很广,比如目标识别,photoshop 的魔术棒功能等等,是填充类算法中应用最为广泛的一个算法. 漫水填充算法函数 - cvFloodFill() 函数原型: void cvFloodFill ( IplImage * img, // 输入图像 CvPoint seedPoint, // 种子点 CvScalar newVal, // 像素点被染色的值 CvScalar loDiff…
泛洪填充算法(Flood Fill Algorithm) 泛洪填充算法又称洪水填充算法是在很多图形绘制软件中常用的填充算法,最熟悉不过就是 windows paint的油漆桶功能.算法的原理很简单,就是从一个点开始附近像素点,填充成新 的颜色,直到封闭区域内的所有像素点都被填充新颜色为止.泛红填充实现最常见有四邻域 像素填充法,八邻域像素填充法,基于扫描线的像素填充方法.根据实现又可以分为递归与 非递归(基于栈). 在介绍算法的三种实现方式之前,首先来看一下测试该算法的UI实现.基本思路是选择一…
讨论帖: http://bbs.csdn.net/topics/391542633 在Matlab下,使用imfill可以很容易的完成孔洞填充操作,感觉这是一个极为常用的方法,然而不知道为什么Opencv里面却没有集成这个函数.在网上查了好多关于Opencv下的孔洞填充方法,大部分使用轮廓查找方法去做的,但对于这种方法,总感觉不是特别好.之前了解过冈萨雷斯那本书上的孔洞填充算法,所以想着手重新写一个.这里借鉴了冈萨雷斯书上的集合运算方法(并不完全一样)     大致思路如下:     0, …
一.简介 马三从上一家公司离职了,最近一直在出去面试,忙得很,所以这一篇博客拖到现在才写出来.马三在上家公司工作的时候,曾处理了一个UGUI不规则区域点击的问题,制作过程中也有一些收获和需要注意坑,因此记录成博客与大家分享.众所周知在UGUI中,响应点击通常是依附在一张图片上的,而图片不管美术怎么给你切,导进Unity之后都是一个矩形,如果要做其他形状,最多只能旋转一下,或者自己做一些处理.而为了美术效果,很多时候我们不得不需要特定形状的UI,并且让它们实现精准的响应点击.例如下图就是一个不规则…
因为需要,之前写了一个利用mask 得到不规则ROI 区域的程序. 现在需要修改,发现自己都看不懂是怎么做的了.. 所以把它整理下来. 首先利用 鼠标可以得到 你想要的不规则区域的 顶点信息.具体这里不再描述. setMouseCallback("setROIParking_Image", on_MouseHandle, (void*)&SrcImage); 得到不规则区域的顶点之后之后,接下来生成mask. 具体程序如下 void Image::GetROImage() {…
Atitit Seed-Filling种子填充算法attilax总结 种子填充的原理,4联通与8联通区域的选择.. 三个队列 waitProcessPixList tempPixList ProcessedPixList /atiplat_img/src/com/attilax/cca/SeedFillAlgo.java public static void main(String[] args) throws FileExistEx { BufferedImage img = imgx.toI…
UGUI实现不规则区域点击响应 前言 大家吼啊!最近工作上事情特别多,没怎么打理博客.今天无意打开cnblog才想起该写点东西了.今天给大家讲一个Unity中不规则区域点击响应的实现方法,使用UGUI. 本脚本编写时基于Unity 5.3,使用其他版本的Unity可能需要做一些小修改. 本文参考了这篇文章:http://alienryderflex.com/polygon/ 为什么要这么做 大家都知道在UGUI中,响应点击通常是依附在一张图片上的,而图片不管美术怎么给你切,导进Unity之后都是…
本系列文章由@浅墨_毛星云 出品,转载请注明出处.    文章链接: http://blog.csdn.net/poem_qianmo/article/details/28261997 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 知乎:http://www.zhihu.com/people/mao-xing-yun 邮箱: happylifemxy@163.com 写作当前博文时配套使用的OpenCV版本号: 2.4.9 本篇文章中.我们一起探讨…
下午搜索了一堆相关文章,没有找到符合要求的. 对一张图片应用不规则区域的羽化,该怎么做呢? 首先去查了下 羽化的原理,然而没有什么用, 然后就开始从表现层去研究怎么模拟? idea 1: blur滤镜,可以实现边缘“羽化”,但是呢 整个图片都会被模糊.那么可不可以 blur滤镜 后 将它的边缘拿出来给原始图片使用呢?(多层图片叠). 在PS里模拟操作后,程序难度较大. 1:应用blur的层,需要比目标区域大一些,(牵扯程序对点阵外扩的算法) 2:blur层和显示层,边缘结合依然会有“硬边”的问题…
#include<cv.h> #include<highgui.h> int main(int argc, char** argv) { IplImage* img = cvLoadImage(argv[1]); cvNamedWindow("原图", CV_WINDOW_AUTOSIZE); cvShowImage("原图", img); cvFloodFill(img, CvPoint(20, 20), CvScalar(0, 255,…
种子填充算法原理在网上很多地方都能找到,这篇是继上篇扫描线算法后另一种填充算法,直接上实现代码啦0.0 我的实现只是实现了种子填充算法,但是运行效率不快,如果大佬有改进方法,欢迎和我交流,谢谢! 最后还是贴个截图(先在面板里点击点,鼠标移出面板填充): package PolygonScanningAndFilling; public class location { public int x; public int y; } package PolygonScanningAndFilling;…
OSPF不规则区域实验: 一.知识点整理: OSPF中路由器的角色(看图): 骨干路由器:路由器所有接口属于area 0  -->R3 非骨干路由器:路由器所有接口属于非area 0  -->R1.R5 ABR:区域边界路由器,能够产生3类LSA的路由器.(属于area 0和非area 0边界的路由器)  --->R2.R4 ASBR:自治系统边界路由器,能够产生5类或7类LSA的路由器.(OSPF网络和非OSPF网络的边界路由器,或者不同OSPF进程(ospf 1 和ospf 2)的边…
知识掌握 cv2.threshold()函数: 设置固定级别的阈值应用于多通道矩阵,将灰度图像变换二值图像,或去除指定级别的噪声,或过滤掉过小或者过大的像素点. Python: cv2.threshold(src, thresh, maxval, type[, dst]) → retval, dst 在其中: src:表示的是图片源 thresh:表示的是阈值(起始值) maxval:表示的是最大值 type:表示的是这里划分的时候使用的是什么类型的算法,常用值为0(cv2.THRESH_BIN…
UVA 572 -- Oil Deposits(DFS求连通块) 图也有DFS和BFS遍历,由于DFS更好写,所以一般用DFS寻找连通块. 下述代码用一个二重循环来找到当前格子的相邻8个格子,也可用常量数组或者写8条DFS调用. 下述算法是:种子填充(floodfill) 两种连通区域 四连通区域:从区域内一点出发,可通过上.下.左.右四个方向的移动组合,在不越出区域的前提下,能到达区域内的任意像素 八连通区域:从区域内每一像素出发,可通过八个方向,即上.下.左.右.左上.右上.左下.右下移动的…
首先,我们需要把图片展示在界面上.很简单的操作,唯一需要注意的是由于CGContextDrawImage会使用Quartz内以左下角为(0,0)点的坐标系,所以需要使用CGContextTranslateCTM函数和CGContextScaleCTM函数把以左下角为0点的坐标系转化成左上角形式的坐标系. ViewController中的代码: //ViewController中的viewDidLoad方法- (void)viewDidLoad { //从Bundle中读取图片 UIImage *…
之前建立了一个SVM-based Ordinal regression模型,一种特殊的多分类模型,就想通过可视化的方式展示模型分类的效果,对各个分类区域用不同颜色表示.可是,也看了很多代码,但基本都是展示二分类,当扩展成多分类时就会出现问题,所以我的论文最后就只好画了boundary的图了.今天在研究Random Forest时,找到了下面的demo的MATLAB代码,该代码很好的实现了各分类区域的颜色填充,效果非常漂亮. 下面是一个Demo代码:Demo.m %% generate data…
在图像处理里,如果我们需要填充一个区域,使该区域为相同的颜色,则比较常用的是洪水填充法.洪水填充法可以用DFS也可以用BFS实现. opencv下有函数实现该功能: CVAPI(void) cvFloodFill( CvArr* image, CvPoint seed_point, CvScalar new_val, CvScalar lo_diff CV_DEFAULT(cvScalarAll()), CvScalar up_diff CV_DEFAULT(cvScalarAll()), Cv…
原理: 1.确保拖动对象在鼠标点上,如果不确定会出现瞬间移动的感觉 2.确保触碰到非通行区域,跳回到没触碰的点 源码: import flash.events.MouseEvent; import flash.events.Event; car.buttonMode = true; car.addEventListener(MouseEvent.MOUSE_DOWN,downH); var diffX:Number, diffY:Number; var canMove:Boolean = fal…
按P,鼠标变成钢笔工具,点选住待清除区域,如下: 按ctrl+enter, 将点线变成选中区域: 按delete删除: ctrl+D取消选中区域 完成!…
概述 在正常的使用场景中,我们处理了比较多的矩形区域内触摸事件,比如UIButton.UIControl.一般来说,这些控件的图形以及触摸区域都是矩形或者圆角矩形的.但是在一些特殊应用场景中我们有时不得不面对这样一种比较严苛的需求,比如要求程序只对某个圆形.五角形等非常规区域的点击事件进行处理,这就需要花点功夫了.本文以圆形为例子来介绍此类场景的处理方法. 先看下面一张图(附图1),我们的目标是实现如下自定义tabbar.中间带突起圆形的自定义tabbar曾一度流行,今天我们来粗糙地实现一下.…
概述 在正常的使用场景中,我们处理了比较多的矩形区域内触摸事件,比如UIButton.UIControl.一般来说,这些控件的图形以及触摸区域都是矩形或者圆角矩形的.但是在一些特殊应用场景中我们有时不得不面对这样一种比较严苛的需求,比如要求程序只对某个圆形.五角形等非常规区域的点击事件进行处理,这就需要花点功夫了.本文以圆形为例子来介绍此类场景的处理方法. 先看下面一张图(附图1),我们的目标是实现如下自定义tabbar.中间带突起圆形的自定义tabbar曾一度流行,今天我们来粗糙地实现一下.…
/*函数的输入:(1)当前点的坐标p(2)区域顶点数组pt[]:(3)顶点数nCount 输出: 在区域内返回TRUE,否则返回FALSE.  Point类型是一个结构: struct Point {    类型 x;//此处类型根据采用的经纬度类型决定.    类型 y; };*/BOOL PtInPolygon(Point p, Point pt[], int nCount){   int nCross = 0;   for (int i = 0; i < nCount; i++)   { …
话不多说,直接上代码 var target = pattern.Target; var name = pattern.Name; var fpElem = FillPatternElement.GetFillPatternElementByName(doc, target, name); using (var tran = new Transaction(doc, "FillPattern")) { tran.Start(); var selectionIds = app.Active…