- 博客(540)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 windows调用C++动态库BOOL未定义
摘要: 动态库项目中能识别BOOL,但调用项目报错"未定义标识符",因缺少BOOL定义依赖。BOOL是Windows自定义类型(int别名),动态库可能隐式包含Windows.h,而调用项目未包含。 解决方案: 推荐:修改动态库头文件api_pr.h,开头添加BOOL定义(Windows平台包含Windows.h,非Windows平台自定义typedef int BOOL),确保自包含性。 临时方案:调用项目在包含api_pr.h前先包含Windows.h,但维护成本高。 注意事项: 确
2026-01-07 22:30:18
112
原创 python如何实现类似C++一样调用动态库
摘要:本文介绍三种动态更新业务逻辑的方案,无需重新打包主程序EXE。方案1使用Python动态加载.py模块,简单易用但安全性低;方案2将.py编译为.pyd动态库,隐藏源码并提升性能;方案3通过ctypes调用C/C++编译的.dll/.so动态库,实现高性能跨语言调用。三种方案均通过分离核心逻辑与主程序,实现动态更新功能。
2026-01-04 20:34:58
1242
原创 python 调用C++动态库还会存在GIL问题吗
Python调用C++动态库是否受GIL影响取决于是否主动释放GIL。默认情况下,GIL会限制多线程并行执行,因为调用过程中仍持有GIL。若在C++代码中通过Python C API显式释放GIL(使用PyGILState_Release/Ensure),则可实现真正的多核并行,仅在Python与C++交互边界短暂持有GIL。不同调用方式(ctypes/cffi/Python C扩展)处理GIL的机制略有差异,但核心原理相同:主动释放GIL才能突破性能瓶颈,充分发挥C++的并行优势。
2026-01-04 12:06:32
716
原创 ORM 的优势
FastAPI与ORM(如SQLAlchemy 2.0+)结合的核心优势在于提升开发效率与安全性。ORM通过将数据库表映射为Python类,实现用纯Python代码操作数据库,降低SQL学习成本并增强代码可维护性。其与FastAPI的Pydantic模型无缝集成,实现类型安全校验和API文档自动生成。ORM自动采用参数化查询防止SQL注入,并支持跨数据库迁移。此外,还提供自动迁移脚本生成、关联查询、事务管理等高级功能,简化复杂业务场景开发。这种组合既能提高开发效率,又能确保数据操作的安全性和灵活性。
2026-01-04 09:47:03
488
原创 async 和 await 详细解析
Python中的async和await关键字是异步编程的核心语法,用于实现非阻塞式代码执行。async用于定义异步函数(协程函数),调用时返回协程对象而非立即执行;await只能在异步函数内部使用,用于挂起当前协程并等待可等待对象完成。异步编程通过事件循环(Event Loop)调度协程执行,在IO等待时切换任务,显著提升IO密集型应用(如网络请求、数据库操作)的并发性能。相比同步编程,异步模式能充分利用CPU资源,减少IO等待时间。
2025-12-30 22:00:24
974
原创 简单fastapi和压测实例
摘要 本文档包含两个主要部分: FastAPI用户管理接口:实现了一个基于FastAPI的用户管理服务,包含查询所有用户和插入单条用户数据功能。使用连接池管理MySQL数据库连接,采用Pydantic进行数据验证,并实现了事务处理机制。接口包括: GET /api/shop/users 查询所有用户 POST /api/shop/users 创建新用户 接口压测工具:提供了一个Python实现的压力测试工具,可配置并发线程数、总请求数和超时时间。工具会记录每个请求的响应时间,并统计成功/失败次数,支持多线程
2025-12-30 21:55:47
688
原创 SQL注入
SQL注入是一种高危网络攻击手段,攻击者通过插入恶意SQL片段篡改数据库命令,可能导致数据泄露、篡改或删除。参数化查询通过"先编译SQL模板,后传入参数"的机制从根本上防止注入:SQL模板中的占位符仅作为参数位置标记,实际参数会被自动转义为纯数据。示例显示,当攻击者输入包含DROP命令的参数时,参数化查询会将其转为普通字符串存储,而非执行恶意命令。关键注意事项包括:必须使用驱动指定的占位符格式(如MySQL用%s)、参数需以元组/列表形式传递、占位符仅适用于参数值而非表名等SQL元素。开
2025-12-30 20:29:28
1097
原创 ASGI和AWSIG区别
WSGI和ASGI是Python中Web服务器与应用程序的通信规范。WSGI是同步标准,仅支持HTTP 1.x,适用于传统框架如Flask;ASGI支持异步,兼容HTTP 1.x/2、WebSocket等,适用于FastAPI等现代框架。核心区别在于WSGI采用同步阻塞模型,而ASGI采用异步非阻塞模型,能显著提升I/O密集型场景的并发性能。WSGI生态成熟但性能有限,ASGI兼容WSGI且功能更丰富。选择标准取决于应用需求:传统同步应用用WSGI,需要高性能或实时功能则用ASGI。ASGI需要异步代码配合
2025-12-12 21:35:07
498
原创 uvicorn是啥
摘要:Uvicorn是Python生态中高性能的ASGI服务器,专为异步Web应用(如FastAPI、Starlette)设计。它负责监听端口、解析HTTP请求、调度应用代码并返回响应,支持异步I/O处理。安装简单,支持热重载(--reload)开发模式,生产环境建议搭配Gunicorn使用。Uvicorn与FastAPI分工明确,前者作为服务器处理请求传递,后者专注业务逻辑。特性包括异步支持、HTTP/2/WebSocket兼容、轻量易用,是运行现代异步Web应用的核心工具。
2025-12-12 21:34:06
531
原创 ISO 及shut_time原理
ISO和快门时间是控制数码摄影曝光的两个核心参数。ISO通过放大感光元件的电信号来提升亮度,但会同步放大噪声,导致高ISO时画质下降;而快门时间则直接控制光线照射感光元件的时长,长快门可积累更多光线但可能产生动态模糊,短快门能定格瞬间但可能曝光不足。两者原理不同:ISO是信号后处理,快门是前端物理调控。实际拍摄需权衡噪点和模糊问题,选择最佳组合。
2025-10-05 10:22:36
1010
原创 ISO 和 shutter_time
ISO和快门时间是摄影中控制曝光的两大核心参数。ISO衡量感光元件对光线的敏感度,数值越高噪点越多但能适应弱光环境;快门时间决定光线进入的时间长短,较短的快门可冻结运动,较长的快门能积累光线但可能导致模糊。两者需互补调节:缩短快门时间可提高ISO补光,降低ISO则需延长快门时间(需防抖)。例如室内拍摄时,可通过提高ISO或延长快门来增加曝光量。
2025-10-05 10:21:31
565
原创 Python 判断两个文件是否二进制相同的方法
本文介绍了两种Python判断文件二进制相同的方法:1)直接分块比较法,通过逐块读取比较内容,发现差异立即返回,效率高且内存占用小;2)哈希值比较法,计算文件MD5哈希后比较,适合需要保存比较结果或文件不在同位置的场景。两种方法各有优势,前者适合快速比较可能有差异的文件,后者便于多次比较和结果保存。对于大文件两者效率相近,根据具体需求选择合适方法即可。
2025-09-23 10:01:04
335
原创 装饰器模式(C++python)
这段代码展示了装饰器模式(Decorator Pattern)的经典实现,通过动态添加功能扩展对象行为而不改变其结构。核心角色包括抽象构件(Shape)、具体构件(Circle)、抽象装饰器(ShapeDecorator)和具体装饰器(RedBorderDecorator/ShadowDecorator)。执行时形成链式调用,先执行原始功能再逐层添加装饰逻辑(如红色边框和阴影)。Python装饰器采用类似原理,通过"@语法糖"包装目标函数,在调用前后插入额外操作。两者都遵循开闭原则,支持
2025-08-27 23:46:28
730
原创 raw图G通道
本文介绍了一种从拜耳阵列RAW图像中提取G通道信息的方法。通过Python实现,主要功能包括:1) 读取RAW数据并解析为数组;2) 根据不同的拜耳模式(RGGB/BGGR/GRBG/GBRG)创建G通道掩码;3) 计算整体和300x300区域内G通道的平均亮度值。程序还支持可视化展示G通道分布,输出详细调试信息。该工具适用于图像处理中G通道信息的提取和分析,可帮助调试相机传感器性能。核心算法直接处理原始拜耳阵列数据,避免了填充0值的影响。
2025-08-25 09:05:06
166
原创 python遇到异常流程
Python中异常处理与程序退出的关系:未捕获的异常会导致程序非零退出(状态码1),打印错误信息;try-except捕获异常后程序继续执行(状态码0);可通过sys.exit(n)主动控制退出状态码。处理异常能避免程序意外终止,而未处理异常会立即终止程序。
2025-08-18 22:41:25
397
原创 MP4 文件格式验证工具
本文介绍了一个基于Python的MP4文件格式验证工具,使用pymediainfo库对MP4文件进行多维度检测。工具可验证文件是否存在、格式类型、视频/音频轨道完整性、编码兼容性等关键要素,并提供详细的文件信息(如编码、分辨率、时长等)。支持主流MP4视频编码(H.264/H.265/VP9等)和音频编码(AAC/MP3等)。用户只需修改文件路径参数即可运行检测,输出结果包含有效性判断和详细错误信息。该工具适用于视频处理、文件校验等场景,帮助快速识别异常MP4文件。
2025-08-18 22:34:21
1055
原创 MP4文件抽帧保存到本地
本文介绍了一个使用OpenCV从MP4视频中均匀抽取帧的Python程序。该程序可以指定需要抽取的帧数(默认为10帧),自动计算采样间隔,并将帧图像保存到指定目录。程序会处理视频总帧数不足的情况,提供详细的处理日志,支持自定义输出格式和帧数。使用前需安装opencv-python库,只需修改视频路径参数即可运行。该工具适用于视频分析、关键帧提取等应用场景。
2025-08-18 20:32:58
387
原创 提亮pgm
本文介绍了两种提升PGM格式图片亮度的方法:1)使用Pillow库通过Gamma校正快速调整像素值;2)手动解析PGM文件进行底层操作。两种方法均通过线性调整灰度值(乘以亮度因子)实现亮度提升,需注意防止像素值溢出。Pillow方法简单高效,适合常规使用;手动解析适合学习原理。亮度因子建议1.1-2.0,可根据需求逐步调整。两种方式均兼容P2/P5格式,能保持原格式特性。
2025-08-18 20:13:44
293
原创 pgm图片上下两部分灰度值
该Python代码实现了PGM图片上下部分灰度平均值的计算。通过Pillow库读取PGM图片并转为灰度模式,使用numpy数组分割图片为上下两部分,分别计算其像素灰度均值。代码兼容不同PGM格式,自动处理奇数高度情况,输出结果保留两位小数并显示差值,便于分析图片亮度分布差异。使用时只需替换文件路径即可运行。
2025-08-18 19:39:48
294
原创 pgm格式图片
PGM(Portable Graymap Format)是一种便携式灰度图像格式,属于Netpbm图像格式家族。它支持ASCII文本(P2)和二进制(P5)两种存储模式,文件结构简单明了,包含文件头(标识符、尺寸、灰度极值)和像素数据。PGM格式因跨平台兼容性强、易于解析等特点,被广泛应用于计算机视觉算法测试、科学数据可视化和图像处理教学。主流图像处理库(如PIL、OpenCV)均支持PGM文件的读写操作,使其成为处理灰度图像的理想选择。
2025-08-18 19:30:24
1252
原创 判断pgm图片是否完整
要判断PGM文件格式是否正确,需检查其核心特征:文件头标识("P2"或"P5"魔数)、宽度/高度/最大灰度值参数,以及像素数据完整性。Python脚本可通过解析文件头、跳过注释行、验证像素数据量(ASCII文本或二进制字节数)来实现自动检测。关键点包括:魔数验证、尺寸参数有效性、像素值范围检查(0-最大灰度值)以及数据长度匹配。该验证方法可准确区分P2(ASCII)和P5(二进制)两种PGM格式,确保文件符合规范要求。
2025-08-18 19:27:28
355
原创 python列表 append externd
Python中,append()和extend()是列表的两种添加元素方法,核心区别在于:append()将参数作为单个元素整体添加,而extend()会拆分可迭代对象的元素逐个添加。元组作为不可变序列,通过+拼接实现类似功能(生成新元组)。字典则通过键赋值添加单个键值对,使用update()方法合并多个键值对。这两种数据结构因自身特性(不可变性/键值对结构)没有与列表完全相同的append/extend方法,但都能通过特定语法实现类似操作。选择时需注意元组操作会生成新对象,字典操作会直接修改原字典。
2025-08-15 00:24:36
736
原创 PLC寄存器写入验证工具
PLC寄存器写入验证工具是一款基于PyQt5和modbus_tk开发的GUI应用,用于通过Modbus TCP协议与PLC设备通信。该工具提供简洁界面,支持连接PLC、写入寄存器数据并自动验证结果,适用于工业自动化调试。主要功能包括:建立Modbus TCP连接、指定寄存器地址和写入值、后台线程执行网络操作避免UI卡顿、实时状态显示和错误提示。使用前需安装Python 3.x、PyQt5和modbus_tk库,操作时需确保PLC设备网络配置正确。该工具采用多线程设计,通过信号槽机制实现线程间通信,提供完善的
2025-08-15 00:18:41
979
原创 固定轮廓内黑色异物检测
图像轮廓分析工具摘要 本工具通过OpenCV实现图像中大轮廓及黑色区域的自动检测与分析。核心功能包括:预处理图像(灰度化、二值化、形态学操作)、提取大轮廓(面积阈值可调)、分析轮廓内黑色区域(面积过滤)、计算白黑像素比值,并将结果可视化标注在图像上。支持单张或批量处理,输出包含轮廓面积和比值等定量数据。参数灵活可调,适用于工业检测等场景。主要函数包括图像预处理、轮廓提取、黑色区域处理及结果标注绘制,最终生成带分析结果的标注图像和数值报告。
2025-08-08 10:08:20
1097
原创 cv2.threshold cv2.morphologyEx
OpenCV图像处理参数解析: 阈值处理:cv2.threshold()将灰度图二值化,参数包括输入图像、阈值、最大值和类型(如THRESH_BINARY将高于阈值设为255,否则0)。其他类型支持反二值化/截断等操作。 形态学操作:cv2.morphologyEx()通过核结构处理二值图像,开运算(MORPH_OPEN)先腐蚀后膨胀可去噪,参数含操作类型、核矩阵(如3×3矩形)及迭代次数。闭运算/梯度等操作可填充空洞或提取边缘。两者均返回处理后的图像。(150字)
2025-08-07 23:33:35
458
原创 CCT lux
摘要: CCT(相关色温)和lux(勒克斯)是光学中的两个关键参数,分别描述光的颜色和强度特性。CCT以开尔文(K)为单位,衡量光源颜色与黑体辐射的相似度,低CCT(2700K-3000K)为暖黄光,高CCT(5000K-6500K)为冷白光,影响视觉感受和情绪。lux则衡量光照强度,表示单位面积的光通量(1 lux=1 lm/m²),直接反映环境亮度(如室内照明50-500 lux,晴天数万lux)。CCT决定光色,lux决定亮度,二者共同用于照明设计、摄影等领域。
2025-08-05 20:49:16
667
原创 ISO(感光度)的工作原理
ISO(感光度)通过调整相机对光线的敏感度来控制图像亮度。胶片相机中,ISO取决于胶片的银盐颗粒大小,高ISO感光强但颗粒明显。数码相机则通过电子放大传感器的电信号实现ISO调节,高ISO能提升亮度但会产生噪点。两者核心作用相同,但胶片ISO固定而数码可调,高ISO均会以画质为代价。
2025-08-04 16:37:41
754
原创 感光度和快门速度、光圈
摘要:摄影中的“曝光三要素”——光圈、快门速度和感光度(ISO)共同决定照片的明暗程度。光圈控制进光量(f值越小光量越大),快门速度调节曝光时间(速度越慢光量越多),ISO调整传感器对光的敏感度(数值越高画面越亮)。三者需平衡调整以实现正确曝光,例如缩小光圈需降低快门速度或提高ISO补偿。此外,光圈影响景深,快门速度决定动态效果,ISO关联画质噪点,拍摄时需根据需求权衡取舍。(150字)
2025-08-04 16:37:05
1015
原创 git初始流程
本文详细介绍了Git项目开发的完整流程:首先克隆远程仓库并切换到指定分支;然后通过git add、commit和push完成日常修改提交,强调每次提交前需拉取最新代码以避免冲突;最后提醒注意分支关联、冲突处理和提交规范等关键事项。该流程确保开发者能规范地进行版本控制,保持代码同步。
2025-07-23 23:20:39
268
原创 RGB转灰度方法汇总
RGB转灰度有多种方法,最常用的是基于人眼视觉特性的加权平均法,如BT.601标准(0.299R+0.587G+0.114B)和BT.709标准(0.2126R+0.7152G+0.0722B)。其他方法包括均等加权法(计算简单但效果较差)、单通道提取法(适用于特定场景)、基于亮度通道的转换(如YCrCb的Y或Lab的L)以及非线性转换(如Gamma校正后加权)。选择方法需考虑应用场景,日常处理推荐BT.601,高清显示用BT.709,简易场景可用均等加权或单通道提取。
2025-07-19 17:31:40
715
原创 常见标准光源色温
光源色温是衡量光色特性的重要指标,以开尔文(K)为单位。色温源自绝对黑体加热时光色的变化:低温呈红橙色,中温变白,高温偏蓝。常见分为三类:低色温(<3300K)营造温馨氛围,适用于卧室、餐厅;中色温(3300-5300K)接近自然光,适合办公学习;高色温(>5300K)提供明亮冷光,多用于手术室、车间。色温选择需结合场景需求,如卧室宜用暖光,商业空间需考虑显色性。标准照明体涵盖不同色温,如D65(6500K)用于色彩评估,TL84(4000K)适合商场照明。实际应用中需注意色温协调与人体舒适度。
2025-07-19 17:10:12
2336
原创 MTF算法V1.0
本文介绍了MTF(调制传递函数)的计算原理和实现方法。MTF用于评估成像系统对不同空间频率信号的对比度传递能力,其计算流程包括四个关键步骤:边缘扩散函数(ESF)→线扩散函数(LSF)→空间频率响应(SFR)→MTF。文章通过代码演示了如何从模拟边缘图像中提取ESF、计算LSF(ESF的一阶导数),再通过傅里叶变换得到MTF。核心在于将空间域的边缘响应转换为频率域的传递特性,其中归一化处理(零频处MTF=1)和频率单位转换是重要细节。该方法可通过实际边缘图像分析真实系统的分辨率性能。
2025-07-19 15:36:15
1979
原创 MTF和SFR异同
MTF和SFR都是评价成像系统空间分辨能力的核心指标,二者均基于频率域分析,反映系统对不同精细程度细节的传递能力。本质联系在于:在理想线性移不变系统中,MTF是SFR的幅度分量,衰减趋势一致。主要区别在于:MTF仅反映对比度传递(实数),而SFR是复数函数,同时包含幅度和相位信息;MTF通过正弦光栅直接测量,SFR多采用边缘法计算;MTF适用于理论设计,SFR更适合实际测试。简言之,SFR是包含相位信息的完整频率响应,MTF是其幅度部分的简化表达。
2025-07-19 15:23:40
995
原创 解析力和清晰度区别
清晰度与解析力是视觉成像领域两个相关但不同的概念。清晰度指图像给人主观上的"清楚感",受对比度、锐噪点等多因素影响;解析力则是设备分辨细微结构的客观能力,主要取决于光学系统设计和传感器性能。两者相互关联:解析力是清晰度的基础,但高解析力设备若处理不当,清晰度可能下降。实际应用中,解析力决定细节分辨上限,而清晰度反映最终呈现效果。例如高解析力镜头能捕捉细微纹理,但图像处理不佳会导致清晰度降低。
2025-07-17 21:21:06
605
原创 python 双下划线开头函数
Python中双下划线开头的方法有特殊用途:1) 魔术方法(如__init__、__str__等)用于实现类的内置行为;2) __method形式的私有方法通过名称修饰(如_Classname__method)避免子类命名冲突。单下划线方法(如_method)仅为约定上的私有,而双下划线会实际修改名称。特殊方法不应与私有方法混淆,合理使用这些机制可使代码更规范。
2025-07-14 21:25:57
341
原创 C++根据配置文件灵活执行函数
本文介绍了一种通过配置文件按序号调用C++函数的实现方法。配置文件采用"序号=函数名"的键值对格式,程序会自动按序号升序解析并执行对应函数,不依赖物理顺序。核心实现包括:1)建立函数名到函数的映射表;2)解析配置文件并过滤无效项;3)按序号排序后执行注册函数。该方案支持扩展带参数函数、多种配置格式及动态加载,适用于需要灵活配置函数调用顺序的场景。示例展示了从乱序配置文件中正确执行1→2→3顺序函数调用的过程。
2025-07-10 18:32:45
328
原创 python GIL
Python全局解释器锁(GIL)是CPython的核心机制,它限制同一时间仅有一个线程执行字节码,影响多线程性能。GIL确保了内存管理的线程安全并简化了实现,但对CPU密集型任务造成性能瓶颈。可通过多进程或C扩展绕过GIL限制。虽然GIL存在争议,但其线程安全优势使移除计划暂未实现。开发者需根据任务类型(I/O或CPU密集型)选择多线程、多进程或异步编程等方案。其他Python解释器如Jython/IronPython无GIL,但主流CPython仍保留该机制。
2025-07-03 20:41:00
719
原创 python线程常见问题
Python线程与GIL问题摘要: Python多线程受全局解释器锁(GIL)限制,同一时间仅一个线程执行字节码,导致CPU密集型任务无法并行加速,建议改用多进程(multiprocessing)。线程安全问题可通过锁(Lock)或线程安全队列(Queue)解决;死锁需规范锁的获取顺序。I/O密集型任务仍适用多线程(GIL会在I/O等待时释放)。线程间通信推荐Queue或Event,异常需内部捕获再传递。资源管理用with/try-finally,复杂场景建议线程池(ThreadPoolExecutor)。
2025-07-03 18:26:59
806
原创 C++ 创建动态库及两种方法调用动态库
摘要:本文介绍了在VS2019环境下创建动态库的步骤。首先新建空项目并将配置类型改为DLL,然后编写头文件(MyLibrary.h)定义导出/导入宏(MYLIBRARY_API)和函数原型(add和reverse_string)。接着实现.cpp文件,包含加法函数和字符串反转函数的具体实现。通过extern "C"确保函数名不被修饰,最终完成动态库的创建。该库提供基础数学运算和字符串处理功能。
2025-07-02 18:01:36
612
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅