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.rhkb.cn/news/223094.html

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

相关文章

k8s 中部署Jenkins

创建namespace apiVersion: v1 kind: Namespace metadata:name: jenkins创建pv以及pvc kind: PersistentVolume apiVersion: v1 metadata:name: jenkins-pv-volumenamespace: jenkinslabels:type: localapp: jenkins spec:#storageClassName: manualcapacity:storage: 5Giacc…

鸿蒙原生应用再添新丁!喜马拉雅入局鸿蒙

鸿蒙原生应用再添新丁&#xff01;喜马拉雅入局鸿蒙 来自 HarmonyOS 微博12月20日消息&#xff0c; #喜马拉雅正式完成鸿蒙原生应用版本适配#&#xff0c;作为音频业巨头的喜马拉雅 &#xff0c;将基于#HarmonyOS NEXT#创造更丰富、更智慧的全场景“声音宇宙”&#xff01;#鸿…

Spring security之授权

前言 本篇为大家带来Spring security的授权&#xff0c;首先要理解一些概念&#xff0c;有关于&#xff1a;权限、角色、安全上下文、访问控制表达式、方法级安全性、访问决策管理器 一.授权的基本介绍 Spring Security 中的授权分为两种类型&#xff1a; 基于角色的授权&…

mathtype公式章节编号

1. word每章标题后插入章节符 如果插入后显示章节符&#xff0c;需要进行隐藏 开始->样式->MTEquationSection->修改样式->字体&#xff0c;勾选隐藏 2. 设置mathtype公式编号格式 插入编号->格式化->设置格式

Ansible自动化工具之Playbook剧本编写

目录 Playbook的组成部分 实例模版 切换用户 指定声明用户 声明和引用变量&#xff0c;以及外部传参变量 playbook的条件判断 ​编辑 习题 ​编辑 ansible-playbook的循环 item的循环 ​编辑 list循环 ​编辑 together的循环&#xff08;列表对应的列&#xff0…

【Pytorch】学习记录分享6——PyTorch经典网络 ResNet与手写体识别

【Pytorch】学习记录分享5——PyTorch经典网络 ResNet 1. ResNet &#xff08;残差网络&#xff09;基础知识2. 感受野3. 手写体数字识别3. 0 数据集&#xff08;训练与测试集&#xff09;3. 1 数据加载3. 2 函数实现&#xff1a;3. 3 训练及其测试&#xff1a; 1. ResNet &…

数据库编程大赛:一条SQL计算扑克牌24点

你是否在寻找一个平台&#xff0c;能让你展示你的SQL技能&#xff0c;与同行们一较高下&#xff1f;你是否渴望在实战中提升你的SQL水平&#xff0c;开阔你的技术视野&#xff1f;如果你对这些都感兴趣&#xff0c;那么本次由NineData主办的《数据库编程大赛》&#xff0c;将是…

IAR安装注册

IAR安装注册 一、 概述 此文记录IAR 开发工具 EWARM-CD-8321-18631 安装注册过程&#xff0c;以及工程编译、调试、烧录下载方法。 二、安装 安装文件: 选择安装 IAR: 一路 NEXT 遇到对话框点击 ”是” 即可安装完成, 图标如下: 三、 注册 先断开网络链接, 不能链接…

Shell编程从入门到实战

Shell 概述 &#xff08;1&#xff09;Linux 提供的 Shell 解析器有 [rootflinkTenxun ~]# cat /etc/shells&#xff08;2&#xff09;bash 和 sh 的关系 [rootflinkTenxun bin]# ll | grep bash&#xff08;3&#xff09;Centos 默认的解析器是 bash [rootflinkTenxun bin]…

【JavaWeb学习笔记】14 - 三大组件其二 Listener Filter

项目代码 https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/listener https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/filter API文档JAVA_EE_api_中英文对照版 Listener 一、监听器Listener 1. Listener监听器它是JavaWeb的三大组件之一。 J…

【数据结构】栈的使用|模拟实现|应用|栈与虚拟机栈和栈帧的区别

目录 一、栈(Stack) 1.1 概念 1.2 栈的使用 1.3 栈的模拟实现 1.4 栈的应用场景 1. 改变元素的序列 2. 将递归转化为循环 3. 括号匹配 4. 逆波兰表达式求值 5. 出栈入栈次序匹配 6. 最小栈 1.5 概念区分 一、栈(Stack) 1.1 概念 栈&#xff1a;一种特殊的线性表&…

【【迭代16次的CORDIC算法-verilog实现】】

迭代16次的CORDIC算法-verilog实现 -32位迭代16次verilog代码实现 CORDIC.v module cordic32#(parameter DATA_WIDTH 8d32 , // we set data widthparameter PIPELINE 5d16 // Optimize waveform)(input …

十大经典排序算法(个人总结C语言版)

文章目录 一、前言二、对比1.排序算法相关概念1.1 时间复杂度1.2 空间复杂度1.3 排序方式1.4 稳定度 2.表格比较3.算法推荐3.1 小规模数据3.2 中等规模数据3.3 大规模数据3.4 特殊需求 三、排序算法1.冒泡排序&#xff08;Bubble Sort&#xff09;1.1 简介1.2 示例代码&#xf…

【模式识别】探秘判别奥秘:Fisher线性判别算法的解密与实战

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《模式之谜 | 数据奇迹解码》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 目录 &#x1f30c;1 初识模式识…

C++结合OpenCV:掌握图像基础与处理

本文详细介绍了使用 OpenCV4 进行图像处理的基础知识和操作。内容包括图像的基础概念、色彩空间理解、以及如何在 C 中进行图像读取、显示和基础操作。 1.图像的基本概念与术语 图像表示 在计算机视觉中&#xff0c;图像通常表示为一个二维或三维的数组。二维数组表示灰度图像&…

VS(Visual Studio)更改文件编码

vs默认编码是GB2312,更改为UTF-8 工具->自定义

小白实战教学:开发同城外卖跑腿APP

本文将以"小白实战教学"为主题&#xff0c;向大家介绍如何从零开始&#xff0c;开发一款简单而实用的同城外卖跑腿APP。 一、准备工作 在开始之前&#xff0c;我们需要做一些准备工作。首先&#xff0c;确保你已经安装好了开发环境&#xff0c;包括合适的集成开发环…

随机森林 2(决策树)

通过 随机森林 1 的介绍&#xff0c;相信大家对随机森林都有了一个初步的认知&#xff0c;知道了随机和森林分别指的是什么&#xff0c;以及决策树根据什么选择内部节点。本文将会从森林深入到树&#xff0c;去看一下决策树是如何构建的。网上很多文章都讲了决策树如何构建&…

【MySQL】MySQL的数据类型

MySQL的数据类型 一、数据类型分类二、数值类型1、整数类型2、bit类型3、小数类型 三、字符串类型四、时间日期类型五、enum和set类型enum和set查找 数据类型的作用&#xff1a; 决定了存储数据时应该开辟的空间大小和数据的取值范围。决定了如何识别一个特定的二进制序列。 …

pdf 在线编辑

https://smallpdf.com/edit-pdf#rapp 参考 https://zh.wikihow.com/%E5%B0%86%E5%9B%BE%E5%83%8F%E6%8F%92%E5%85%A5PDF