CV算法面试题学习

本文记录了CV算法题的学习。

CV算法面试题学习

  • 点在多边形内(point in polygon)
  • 高斯滤波器

点在多边形内(point in polygon)

参考自文章1,其提供的代码没有考虑一些特殊情况,所以做了改进。
做法:射线法。以待判断点A为端点,画出方向水平朝右的射线,统计该射线与多边形B的交点个数。奇数:内,偶数:外。(需考虑点A是否在B的某个点或边上是否有平行的边。)
图片来自:https://www.jianshu.com/p/ba03c600a557。
在这里插入图片描述
代码:

def is_in_poly(p, poly):""":param p: [x, y]:param poly: [[], [], [], [], ...]:return:"""px, py = pis_in = Falsefor i, corner in enumerate(poly):next_i = i + 1 if i + 1 < len(poly) else 0x1, y1 = cornerx2, y2 = poly[next_i]if (x1 == px and y1 == py) or (x2 == px and y2 == py):  # 点p是否在多边形的某个点上is_in = Truebreakif y1 == y2 :  #边是水平的,如果点在边上则break,如果不在,则跳过这一轮判断if  min(x1, x2) < px < max(x1, x2)and y1==py: is_in = Truebreakelif min(y1, y2) <= py <= max(y1, y2):  #边不是水平的x = x1 + (py - y1) * (x2 - x1) / (y2 - y1)if x == px:  # 点是否在射线上is_in = Truebreakelif x > px:  # 点是否在边左侧,即射线是否穿过边is_in = not is_inreturn is_inif __name__ == '__main__':#第一组,内point = [3, 10/7] poly = [[0, 0], [7, 3], [8, 8], [5, 5]]print(is_in_poly(point, poly))#第二组,外point = [3, 8/7]poly = [[0, 0], [7, 3], [8, 8], [5, 5]]print(is_in_poly(point, poly))#第三组,有平行边,射线与边重合,外point = [-2, 0]poly = [[0, 0], [7, 0], [7, 8], [5, 5]]print(is_in_poly(point, poly))#第四组,有平行边,射线与边重合,内point = [2, 0]poly = [[0, 0], [7, 0], [7, 8], [5, 5]]print(is_in_poly(point, poly))#第五组,在某点上point = [7, 3] poly = [[0, 0], [7, 3], [8, 8], [5, 5]]print(is_in_poly(point, poly))

高斯滤波器

参考文章2
高斯滤波器为线性平滑滤波器,通常假定图像包含高斯白噪声,可以通过高斯滤波来抑制噪声。
二维高斯分布公式
在这里插入图片描述
其中的ux和uy是中心点坐标。

3x3滤波核的生成

  1. 先得到相对于中心点的坐标模板。
    在这里插入图片描述
  2. 根据公式和坐标模板得到滤波核的每个位置的值。当标准差 σ \sigma σ为1.3时,得到的整数形式的滤波核为:
    在这里插入图片描述

代码:

import cv2import numpy as np# Gaussian filterdef gaussian_filter(img, K_size=3, sigma=1.3):if len(img.shape) == 3:H, W, C = img.shapeelse:img = np.expand_dims(img, axis=-1)H, W, C = img.shape## Zero paddingpad = K_size // 2out = np.zeros((H + pad * 2, W + pad * 2, C), dtype=np.float)out[pad: pad + H, pad: pad + W] = img.copy().astype(np.float)## prepare KernelK = np.zeros((K_size, K_size), dtype=np.float)for x in range(-pad, -pad + K_size):for y in range(-pad, -pad + K_size):K[y + pad, x + pad] = np.exp( -(x ** 2 + y ** 2) / (2 * (sigma ** 2)))K /= (2 * np.pi * sigma * sigma)K /= K.sum() #归一化print(K)K=K[:,:,np.newaxis].repeat(C,axis=2)# 扩展维度至(K_size,K_size,C)print(K[:,:,0])print(K[:,:,1])tmp = out.copy()# filteringfor y in range(H):for x in range(W):# for c in range(C):out[pad + y, pad + x, :] = np.sum(np.sum(K * tmp[y: y + K_size, x: x + K_size, :],axis=0),axis=0)out = np.clip(out, 0, 255)out = out[pad: pad + H, pad: pad + W].astype(np.uint8)return out# Read image
img = cv2.imread("./lena.png")# Gaussian Filter
out = gaussian_filter(img, K_size=3, sigma=1.3)# Save result
cv2.imwrite("out.jpg", out)
cv2.imshow("result", out)
cv2.imshow("origin", img) 
cv2.waitKey(0)
cv2.destroyAllWindows()

结果:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Zookeeper-应用实战

Zookeeper Java客户端实战 ZooKeeper应用的开发主要通过Java客户端API去连接和操作ZooKeeper集群。 ZooKeeper官方的Java客户端API。 第三方的Java客户端API&#xff0c;比如Curator。 ZooKeeper官方的客户端API提供了基本的操作:创建会话、创建节点、读取节点、更新数据、…

【Unity基础】9.地形系统Terrain

【Unity基础】9.地形系统Terrain 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity基础系列博客&#xff0c;所学知识来自B站阿发老师~感谢 &#xff08;一&#xff09;地形编辑器Terrain &#xff08;1&#xff09;创建地形 游戏场景中大多数的山川河流地表地貌都是基…

16-高并发-队列术

队列&#xff0c;在数据结构中是一种线性表&#xff0c;从一端插入数据&#xff0c;然后从另一端删除数据。 在我们的系统中&#xff0c;不是所有的处理都必须实时处理&#xff0c;不是所有的请求都必须实时反馈结果给用户&#xff0c;不是所有的请求都必须100%一次性处理成功…

数据结构(超详细讲解!!)第二十八节 排序

1.排序的几个基本概念 排序就是将一个数据元素&#xff08;或记录&#xff09;的任意序列&#xff0c;重新排列成一个按关键字有序的序列。 数据表(Data List) &#xff1a;待排序的数据对象的有限集合。 关键字(Key)&#xff1a;数据元素&#xff08;或记录&#xff09;中…

GPT2代码运行,个人文本生成助手,不依赖OpenAI API调用

0.前言: 感觉GPT很好玩,所以想要有个自己搭建GPT的写法,不依赖于OpenAI,需要翻墙太麻烦了,近日日本已经结合GPT4和机器,可以让他吓人,做出丰富的表情,如果自己训练的话,会塑造出什么样的机器人尚未可知…抱着好奇的心态,去github openai下载了个gpt2的模型来玩玩(其中遇到了许多…

HackTheBox - Medium - Linux - Sandworm (我的创作纪念日

Sandworm Sandworm 是一台中等难度的 Linux 机器&#xff0c;它托管了一个具有“PGP”验证服务的 Web 应用程序&#xff0c;该服务容易受到服务器端模板注入 &#xff08;SSTI&#xff09; 的攻击&#xff0c;导致“Firejail”监狱内的远程代码执行 &#xff08;RCE&#xff0…

C++内存管理和模板初阶

C/C内存分布 请看代码&#xff1a; int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)mallo…

【STM32】I2C通信

基本的任务是&#xff1a;通过通信线&#xff0c;实现单片机读写外挂模块寄存器的功能。其中至少要实现在指定位置写寄存器和在指定的位置读寄存器这两个功能。 异步时序的优点&#xff1a;省一根时钟线&#xff0c;节约资源&#xff1b;缺点&#xff1a;对事件要求严格&#…

【XR806开发板试用】通过http请求从心知天气网获取天气预报信息

1. 开发环境搭建 本次评测开发环境搭建在windows11的WSL2的Ubuntu20.04中&#xff0c;关于windows安装WSL2可以参考文章: Windows下安装Linux(Ubuntu20.04)子系统&#xff08;WSL&#xff09; (1) 在WSL的Ubuntu20.04下安装必要的工具的. 安装git: sudo apt-get install git …

基于SpringBoot实现的前后端分离书店项目,功能:注册登录、浏览商品、热门商品、购物车、购买、地址管理、密码管理等

一、项目简介 本项目主要基于SpringBoot、Mybatis-plus、MySQL、Redis实现的书店管理系统。 本系统是前后端分离的&#xff0c;分别由三个子项目构成&#xff1a;java服务端、用户浏览与购买的前端、管理员管理商品的前端 环境 java 1.8mysql8.0redisvue2.x 管理员子系统功…

05. Springboot admin集成Actuator(一)

目录 1、前言 2、Actuator监控端点 2.1、健康检查 2.2、信息端点 2.3、环境信息 2.4、度量指标 2.5、日志文件查看 2.6、追踪信息 2.7、Beans信息 2.8、Mappings信息 3、快速使用 2.1、添加依赖 2.2、添加配置文件 2.3、启动程序 4、自定义端点Endpoint 5、自定…

【JMeter入门】—— JMeter介绍

1、什么是JMeter Apache JMeter是Apache组织开发的基于Java的压力测试工具&#xff0c;用于对软件做压力测试。它最初被设计用于Web应用测试&#xff0c;但后来扩展到其他测试领域。 &#xff08;Apache JMeter是100%纯JAVA桌面应用程序&#xff09; Apache JMeter可以用于对静…