rasterization

news2024/9/24 7:19:31

在cityfm中有说道

Raster is a rasterization function that maps a closed polygon, represented as an ordered list of nodes, to a binary image

要在Python中实现一个将多边形映射到二值图像的光栅化函数,你可以按照以下步骤进行:

  1. 创建一个函数,输入多边形顶点列表和图像的宽高。
  2. 使用扫描线填充算法,来确定多边形内部的哪些像素应该设置为1。
  3. 返回一个二值图像,以2D NumPy数组的形式表示。

import numpy as np

def rasterize_polygon(polygon, img_width, img_height):
    """
    将多边形光栅化为二值图像。
    
    参数:
    polygon (list of tuples): (x, y)元组的列表,表示多边形的顶点。
    img_width (int): 输出二值图像的宽度。
    img_height (int): 输出二值图像的高度。
    
    返回:
    np.array: 二值图像,1表示多边形内部,0表示外部。
    """
    # 创建一个空的二值图像
    binary_image = np.zeros((img_height, img_width), dtype=np.uint8)
    
    # 按y坐标排序顶点
    polygon = sorted(polygon, key=lambda point: point[1])
    
    # 遍历每一条扫描线(图像的每一行)
    for y in range(img_height):
        # 找到扫描线与多边形边的交点
        intersections = []
        for i in range(len(polygon)):
            p1 = polygon[i]
            p2 = polygon[(i + 1) % len(polygon)]
            if p1[1] == p2[1]:  # 忽略水平边
                continue
            if p1[1] < y <= p2[1] or p2[1] < y <= p1[1]:
                x = p1[0] + (y - p1[1]) * (p2[0] - p1[0]) / (p2[1] - p1[1])
                intersections.append(int(x))
        
        # 排序交点并填充交点之间的区域
        intersections.sort()
        for i in range(0, len(intersections), 2):
            if i+1 < len(intersections):
                x_start = max(0, intersections[i])
                x_end = min(img_width, intersections[i+1])
                binary_image[y, x_start:x_end] = 1
    
    return binary_image

# 示例用法
polygon = [(1, 1), (8, 1), (8, 8), (1, 8)]  # 一个简单的正方形多边形
img_width, img_height = 10, 10
binary_image = rasterize_polygon(polygon, img_width, img_height)

print(binary_image)

示例输出:

对于由顶点 [(1, 1), (8, 1), (8, 8), (1, 8)] 定义的正方形多边形,输出的二值图像如下所示:

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

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

相关文章

网络安全 day3 --- WAFCDNOSS反向代理正向代理负载均衡

WAF&#xff08;网页防火墙&#xff09; 原理&#xff1a;Web应用防火墙&#xff0c;旨在提供保护 影响&#xff1a;常规Web安全测试手段会受到拦截 实验&#xff1a;Windows2022 IIS D盾 作用是防范网络安全入侵。 如下图&#xff0c;我们在网站目录下放一个简单的一句话木马…

JavaScript初级——文档的加载

1、浏览器在加载一个页面时&#xff0c;是按照自上向下的顺序加载的&#xff0c;读取到一行就运行一行&#xff0c;如果将 script 标签写到页面的上边&#xff0c;在代码运行时&#xff0c;页面还没有加载&#xff0c;页面没有加载DOM对象也没有加载&#xff0c;会导致无法获取…

一个计算勒让德多项式的HTML页面

效果如下 HTML代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>勒让德多项式</ti…

ZooKeeper体系架构、安装、HA

一、主从架构的单点故障问题 主从架构 Hadoop采用了主从架构&#xff0c;其中包含一个主节点和多个从节点。主节点负责管理整个集群的元数据、任务分配等关键任务&#xff0c;而从节点则负责执行具体的数据存储、计算等操作。 单点故障 在Hadoop主从架构中&#xff0c;主节点作…

Linux并发与竞争

一.概念 Linux 是一个多任务操作系统,肯定会存在多个任务共同操作同一段内存或者设备的情况,多个任务甚至中断都能访问的资源叫做共享资源。在驱动开发中要注意对共享资源的保护,也就是要处理对共享资源的并发访问。 Linux 系统并发产生的原因很复杂,总结一下有下面几个主要原…

wegege

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

使用 setResponseStatus 函数设置响应状态码

title: 使用 setResponseStatus 函数设置响应状态码 date: 2024/8/25 updated: 2024/8/25 author: cmdragon excerpt: 通过 setResponseStatus 函数,你可以轻松地在 Nuxt.js 中设置响应的状态码。这不仅能帮助用户更好地理解发生了什么,还能在需要时显示自定义的错误页面。…

深入探讨与优化:常见排序算法的原理、实现与应用场景分析

目录 引言 排序算法的重要性 排序的基本概念 常见排序算法 插入排序 交换排序 选择排序 归并排序 分配排序 排序算法的实现与优化 总结与应用 引言 排序算法在计算机科学中占据了重要位置&#xff0c;它不仅仅是数据处理的基础&#xff0c;也是优化许多复杂算法的关…

初识redis:Zset有序集合

Set作为集合&#xff0c;有两个特点&#xff1a;唯一且无序。 Zset是有序集合&#xff0c;在保证唯一的情况下&#xff0c;是根据什么来排序的呢&#xff1f;排序的规则是什么&#xff1f; Zset中的member引入了一个属性&#xff0c;分数&#xff08;score&#xff09;&#…

初识redis:类型补充

Redis最关键的五个数据类型&#xff1a;String List Hash Set Zset 我们已经学完了&#xff0c;接下来我们再了解一下不是那么重要的&#xff0c;但是仍然有用的类型。 Stream Redis Stream 是 Redis 5.0 版本引入的一种新的数据类型&#xff0c;它提供了一种存储时间顺序消息…

《机器学习》—— OpenCV 对图片的各种操作

文章目录 1、安装OpenCV库2、读取、显示、查看图片3、对图片进行切割4、改变图像的大小5、图片打码6、图片组合7、图像运算8、图像加权运算 1、安装OpenCV库 使用pip是最简单、最快捷的安装方式 pip install opencv-python3.4.2还需要安装一个包含了其他一些图像处理算法函数的…

智慧交通——铁路检测相关数据集

数据集列表 智慧交通系列数据集——铁路相关数据集&#xff0c;用于轨道交通、自动化、计算机等专业结合深度学习、目标检测、语义分割、实例分割相关技术实现应用型研究&#xff01;&#xff01;&#xff01; 下载链接&#xff1a;私信获取 目前已更新数据集类型如下&#x…

cola_os学习笔记(下)

cola_os学习笔记&#xff08;上&#xff09; os文件夹 cola_device.c ​ .h放在.c的同层级。作者采用了字符设备注册的方式&#xff0c;在.h中可以看到设备属性。也就是把LED这些设备抽象&#xff0c;外面传入"LED1"这样的参数&#xff0c;使我联想到java的new一个…

GoWeb 设置别名和多环境配置

别名 vite.config.ts中添加代码如下即可 //设置别名resolve: {alias: {"": path.resolve(process.cwd(),"src"),//用替代src}}随后即可使用 配置多环境 vite.config.ts中添加代码如下 envDir: ./viteenv,//相对路径随后在项目根目录创建对应的viteenv…

Flink内存调优

Flink内存调优 JVM 我们知道Flink是基于JobManager和TaskManager管理和运行任务&#xff0c;而他们都是以Java进程的形式运行的&#xff0c;所以在了解 Flink 内存时&#xff0c;我们需要先了解一下Java运行时环境Java虚拟机(JVM) 。 JVM 是可运行 Java 代码的假想计算机 &a…

Visio如何对自画的“不规则封闭图案”填充颜色?

Visio如何对自画的“不规则封闭图案”填充颜色&#xff1f; 当我们想要画一个如下所示的不规则图案时&#xff0c;可以根据Visio工具栏中的曲线/直线等进行拼接组成。 但是&#xff0c;画出来的图形即使是组合后也不能直接填充颜色&#xff0c;这是因为软件并不能识别其为一个…

Tomcat上传jsp木马

一、暴力破解 首先我们访问目标IP和端口 点击server status登录&#xff0c;直接burp进行爆破 我们输入tomcat 123 抓包&#xff0c;发现这个Basic是base64编码后的&#xff0c;解码是 tomcat:123 我们暴破时需要注意这里用的base64构成的&#xff0c;具体操作可以看http://…

【微服务】springboot整合对象映射工具MapStruct使用详解

目录 一、前言 二、实体对象映射概述 2.1 什么是实体对象映射 2.1.1 ORM的几个基本概念 2.1.2 ORM常用的框架 2.2 实体对象映射存在的问题 2.2.1 映射配置错误 2.2.2 性能问题 2.2.3 修改字段不一致问题 三、实体对象属性拷贝工具概述 3.1 什么是实体对象属性拷贝工具…

忘掉 Redux,拥抱 Zutand 和 Jotai 的全新世界

Redux 在现代 React 开发中存在着一些明显的局限性。 首先&#xff0c;Redux 的心智负担较重。它涉及到众多概念&#xff0c;如 Store、Reducer、Action 等&#xff0c;对于初学者来说&#xff0c;理解和掌握这些概念需要花费较多的时间和精力。而且&#xff0c;Redux 要求严格…

【MySQL】一文带你理清<表级锁>(表锁,元数据锁,意向锁)

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…