- 博客(2797)
- 收藏
- 关注
原创 python的机器视觉技术与应用工业场景模拟第三十三篇:局部增强图片目标区域,不改动无关背景区域
"局部增强,"老赵在白板上画了一个矩形框把滚子区域圈出来,"只对这个ROI做CLAHE(限制对比度自适应直方图均衡化),背景保持原样。调试工程师老赵赶到现场,看了三分钟图像,摇了摇头:"你动的是全局参数,但问题只在滚子表面——夹具那块根本不需要增强。真正的局部增强 vs 伪局部增强:伪局部做法是"对整张图做增强,再用掩膜把背景贴回原图"——这看似背景没变,但增强时用的直方图统计包含了背景像素,背景的灰度分布会"污染"目标区域的映射曲线。正确的做法是用"画笔"只把人脸区域提亮——这就是局部增强的核心思想。
2026-11-08 16:43:19
210
原创 python的机器视觉技术与应用工业场景模拟第三十二篇:统计图像直方图,直观分析图像明暗像素分布。
现场设备台账:500万像素全局快门CMOS黑白面阵相机,分辨率2448×2048,像元尺寸3.45 μm,镜头焦距35 mm,光圈F4.0,工作距离200 mm,环形白光LED光源(标称色温6000 K,初始照度50000 lux,当前实测照度约33500 lux,已衰减33%),被测铝合金垫片直径30 mm、厚度2 mm、表面Ra 0.8 μm。小李点头:"我写个仿真程序,模拟LED光衰过程——从新灯到老化,生成一系列灰度图,统计每张图的直方图,计算均值、方差、偏度,画出直方图随时间的变化曲线。
2026-11-08 16:23:59
41
原创 python的机器视觉技术与应用工业场景模拟第三十一篇:针对偏色工业图片,做色彩校正还原真实颜色。
"他调出设备台账:500万像素全局快门CMOS彩色面阵相机,分辨率2448×2048,像元尺寸3.45 μm,镜头焦距35 mm,光圈F4.0,工作距离200 mm,环形LED光源(标称色温6500 K,实测约7200 K,照度约30000 lux),被测彩色排线绝缘层色块尺寸10 mm×5 mm。"颜色偏色的本质是RGB三个通道的响应增益不匹配,"老周在白板上画了三条错开的曲线,"光源光谱有偏,相机传感器对R/G/B的量子效率不同,再加上镜头镀膜对不同波长的透过率差异——三者叠加,白色物体拍出来偏蓝。
2026-11-08 08:12:29
123
原创 python的机器视觉技术与应用工业场景模拟第三十篇:优化强光反光图片,去除画面过曝白斑。
"这是典型的非均匀光照 + 镜面反射过曝,"老周蹲在产线旁,用手挡了一下光源边缘,"你看,环形光从正上方打下来,不锈钢表面粗糙度Ra才0.8 μm,跟镜子差不多,入射角等于反射角,光直接进镜头,像素值全飙到250以上。老周调出设备参数:500万像素全局快门CMOS黑白面阵相机,分辨率2448×2048,像元尺寸3.45 μm,镜头焦距35 mm,光圈F4.0,工作距离200 mm,环形LED光源(色温6000 K,照度约50000 lux),被测不锈钢垫片直径30 mm,厚度2 mm。小赵想了想:"明白。
2026-11-08 07:47:15
160
原创 python的机器视觉技术与应用工业场景模拟第二十九篇:模拟运动模糊图像,再编写代码复原清晰图像。
算一下:8 ms内瓶子在像面上移动了0.8×0.008 = 6.4 mm,按像素当量0.02 mm/px,那就是320个像素的位移——整个标签宽度才150 px,你让它在像面上拖了两倍宽的影子,OCR不挂才怪。"小赵想了想:"先走第二条路。老周调出设备参数:500万像素全局快门CMOS黑白面阵相机,分辨率2448×2048,像元尺寸3.45 μm,镜头焦距35 mm,光圈F2.8,工作距离200 mm,环形LED光源(色温6000 K,照度约25000 lux),被测药瓶标签区域尺寸约30×15 mm。
2026-11-08 07:29:36
76
原创 python的机器视觉技术与应用工业场景模拟第二十八篇:读取彩色图,单独修改图片红色通道像素,观察色彩变化。
老周调出相机参数:500万像素全局快门CMOS彩色面阵相机,分辨率2448×2048,像元尺寸3.45 μm,镜头焦距35 mm,光圈F4.0,工作距离200 mm,四通道条形LED光源(R/G/B/W独立可调,单通道最大辐射照度约 85 W/m²,等效白光约 30000 lux),被测PCB板尺寸100×80 mm,最小可检焊盘尺寸0.3 mm(约8.7 px)。"你离线验证的时候,"老周说,"把彩色图的R通道单独提出来,或者把R通道全部置零/减半,观察色彩变化。本篇代码解决 L1 离线仿真校核层。
2026-11-07 14:41:04
164
原创 python的机器视觉技术与应用工业场景模拟第二十七篇:手动修改图片局部区域像素,把图片一角改成纯黑色。
"老周写下参数:500 万像素全局快门 CMOS 面阵相机,分辨率 2448×2048,像元尺寸 3.45 μm,镜头焦距 35 mm,光圈 F4.0,工作距离 200 mm,环形 LED 光源照度 20000 lux,被测铝合金零件直径 50 mm、表面粗糙度 Ra 0.8 μm。"先离线仿真,"老周说,"用程序生成一张正常的金属零件灰度图,把左下角 25×15 的区域全部改成 0,然后跑你的缺陷分类器,看看会不会误报。"这不是零件缺陷,"小赵皱眉,"这是镜头遮光罩的影子。真实缺陷通常内部也有纹理变化。
2026-11-07 11:00:20
150
原创 python的机器视觉技术与应用工业场景模拟第二十六篇:手动修改图片局部区域像素,把图片一角改成纯白色。
"老周写下参数:500 万像素全局快门 CMOS 面阵相机(与系列前篇保持一致),分辨率 5120×3840,像元尺寸 3.45 μm,镜头焦距 50 mm,光圈 F2.8,工作距离 300 mm,四通道条形 LED 光源每通道最大 30000 lux,被测 7 寸液晶面板对角线 178 mm、有效显示区 154.08 mm×85.92 mm。"先离线仿真,"老周说,"用程序生成一张正常的面板灰度图,把右上角 30×20 的区域全部改成 255,然后跑你的边缘检测,看看会不会误检。
2026-11-07 10:25:09
210
原创 python的机器视觉技术与应用工业场景模拟第二十五篇:遍历整张灰度图所有像素,统计图片最亮,最暗的像素值。
raise ValueError("min_val 不能大于 max_val")raise ValueError("灰度值必须在 [0,255]")单像素坏点 / 噪声 min=0、max=255,动态范围“虚假满量程”在存在噪声或坏点的真实图像中,它必须配合分位数和坐标分布一起使用。- 纵向衰减:余弦窗(非 vignette,而是“纵向照度衰减”)一、场景引入:为什么“最亮 / 最暗”不是拍脑袋的事?全局 min / max 是“必要但不充分”的指标。遍历整张灰度图,统计最亮 / 最暗像素值(工程版)
2026-11-07 09:37:15
189
原创 python的机器视觉技术与应用工业场景模拟第二十四篇:读取灰度图,随机修改图片某一个像素点的亮度,直观看到像素变化效果。
一个像素的异常,在 Canny 里会被当成强边缘,直接把你的圆心拟合带偏。"先离线仿真,"老周说,"用程序生成一张干净的渐变灰度图,随机挑一个像素把它改成 255,看看这个单像素突变对整张图的灰度直方图、3×3 邻域梯度、边缘检测结果分别产生多大影响。"[-1,-2,-1;关键认知:梯度峰值出现在坏点的邻域像素上,而非坏点本身——因为 Sobel 核计算的是相邻像素的差值,坏点正上方的像素(灰度约 100)与坏点(255)的差值约 155,经核权重放大后水平梯度可达约 620,幅值可达约 877。
2026-11-07 08:27:52
201
原创 python的机器视觉技术与应用工业场景模拟第二十三篇:读取图片,将图片缩放为固定尺寸,熟悉图像尺寸调整基础操作。
"先离线仿真,用程序生成一张 400×300 的测试图,把它缩放到 200×150 的固定尺寸,对比最近邻、双线性、面积插值三种方法的差异,并演示 ROI 坐标在换型前后的偏移问题。把图像缩放到固定尺寸,就是在算法的入口处建立一个统一的尺度基准——不管原始图像是 1600×1200 还是 800×600,进到算法里都是 200×150,后续所有逻辑都不用再关心"这张图到底多大"。每一项物理含义:目标尺寸是算法期望的统一尺寸(单位像素),原始尺寸是相机实际采集的图像尺寸(单位像素)。
2026-11-06 14:55:02
141
原创 python的机器视觉技术与应用工业场景模拟第二十二篇:同时读取两张图片,分窗口并列展示,适合后期对比实验效果。
对于本篇参数,水平方向 86.4 mm ÷ 1600 px = 0.054 mm/px,垂直方向 64.8 mm ÷ 1200 px = 0.054 mm/px,两个方向一致,说明像素是正方形的。如果两个窗口各自独立、位置由操作系统随意摆放,人眼会被窗口大小、位置、亮度自适应等因素干扰,看到的'差异'可能根本不是光源造成的,而是显示方式造成的。如果两个窗口各自独立弹在屏幕中央叠在一起,人眼会被窗口位置、亮度自适应等因素干扰,看到的"差异"可能根本不是光源造成的,而是显示方式造成的。
2026-11-06 14:26:41
546
原创 python的机器视觉技术与应用工业场景模拟第二十一篇:读取图片,判断图片是否读取成功,编写异常提示,避免代码报销崩溃。
对于本篇参数,水平方向 86.4 mm ÷ 1600 px = 0.054 mm/px,垂直方向 64.8 mm ÷ 1200 px = 0.054 mm/px,两个方向一致,说明像素是正方形的。工业视觉的"读图"不是一个动作,而是一条有去无回的流水线——文件从磁盘读到内存,解码器把字节流变成像素数组,后续算法每一步都假设"我拿到的是一张合法的、三通道的、uint8 的彩色图"。效率说明:开篇场景为 1600×1200 的图像,但本篇为演示效率,仿真使用 400×300 的程序生成图像代替真实照片。
2026-11-06 11:24:22
309
原创 python的机器视觉技术与应用工业场景模拟第二十篇:读取图片,修改窗口名称,自定义展示界面,优化可视化效果。
《Python 机器视觉技术与应用》第二十篇:读取图片,修改窗口名称,自定义展示界面,优化可视化效果 声明:本篇全部为课程离线仿真代码,不能直接用于真实视觉检测系统,规避工程误导风险。环境版本:本篇验证环境为 "opencv-python>=4.8.0",所有数值结果基于该版本复现。 1. 实际工业应用场景 周二上午,轴承滚子外径检测工位。视觉工程师小郑把昨晚调好的检测算法部署到工控机上,双击运行——屏幕上弹出一个标题叫 "img" 的灰色窗口,轴承图像缩在左上角,周围大片黑边,窗口名字和产线上其他十几个调
2026-11-06 10:46:43
192
原创 python的机器视觉技术与应用工业场景模拟第十九篇:编写代码,实现自动读取文件夹内单张图片,避免手动输入路径。
对于本篇参数,水平方向 86.4 mm ÷ 1600 px = 0.054 mm/px,垂直方向 64.8 mm ÷ 1200 px = 0.054 mm/px,两个方向一致,说明像素是正方形的。工业视觉产线上的图像不是一张一张"拿"来的,而是一条连续不断的流水——相机按触发信号拍照,图像文件按时间戳写入指定文件夹,算法挨个读取处理。输入:程序自动生成的本地图片文件夹。"img_path = "D:/data/gear_001.png"",叹了口气:"这要是产线上每分钟拍六十张图,我光改路径都改不过来。
2026-11-06 09:47:56
203
原创 python的机器视觉技术与应用工业场景模拟第十八篇:读取灰度图,打印图片像素矩阵的形状,理解二维像素数组的构成。
对于本篇参数,水平方向 86.4 mm ÷ 1600 px = 0.054 mm/px,垂直方向 64.8 mm ÷ 1200 px = 0.054 mm/px,两个方向一致,说明像素是正方形的。"uint8" 数值,占 1 字节。工业软件里,读图之后的第一件事不是处理,而是打印它的形状,确认你拿到的是二维矩阵还是三维数组——这两个东西在内存里完全是两种布局。"先离线仿真,用程序生成一张标准测试图,分别以彩色和灰度模式读取,打印像素矩阵的形状,把二维数组的维度、内存布局、灰度统计的逻辑跑通。
2026-11-05 15:18:01
254
原创 python的机器视觉技术与应用工业场景模拟第十七篇:读取图片,打印图片的高度,宽度,通道数,看懂图像的基础像素属性。
小郑调出参数表:500 万像素全局快门 CMOS,分辨率 2592×1944,像元尺寸 2.2 μm,镜头焦距 12 mm,光圈 F2.8,工作距离 100 mm,视野范围约 28.8 mm×21.6 mm。工业软件里,读图之后的第一件事不是处理,而是读懂这张图本身——高度是多少行、宽度是多少列、几个通道、什么数据类型,这些属性必须逐个打印、逐个校验。"先离线仿真,用程序生成一张标准测试图,读取图片后打印高度、宽度、通道数等基础像素属性,把图像维度、通道顺序、数据类型、内存布局的逻辑跑通。
2026-11-05 14:54:39
171
原创 python的机器视觉技术与应用工业场景模拟第十六篇:分别以彩色模式,灰度模式读取同一张图片,分窗口对比展示两张图片区别。
老师傅老周端着茶杯走过来:"你这代码在实验室跑 Demo 没问题,丢到产线上就是事故——灰度图是二维数组,Canny 要的是三维三通道,维度对不上,后面的边缘提取、轮廓拟合全都会跟着崩。"cv2.split(img_bgr)" 把三维数组沿通道轴拆成三个二维数组,分别对应 B、G、R 三个单通道灰度图。"先离线仿真,分别以彩色模式和灰度模式读取同一张图片,用 OpenCV GUI 分窗口对比展示,再用 matplotlib 子图保存对比图表,把通道维度差异、显示映射差异、灰度转换公式的逻辑跑通。
2026-11-05 14:12:00
232
原创 python的机器视觉技术与应用工业场景模拟第十五篇:读取图片后,将图片另存为新的图片文件,练习图像保存操作。
小陈调出参数表:200万像素全局快门CMOS,分辨率1600×1200,像元尺寸4.5 μm,镜头焦距25 mm,光圈F4,工作距离300 mm,视野范围约216 mm×162 mm。JPEG是有损压缩,把图像切成8×8的小块做离散余弦变换后丢弃高频分量——恰好是缺陷边缘那种"突然变化"的信息。老师傅老周路过,瞥了一眼屏幕:"你这代码在实验室跑Demo没问题,丢到产线上就是事故——检测结果存不下来,整批次的追溯记录全丢,质量部门能追着你问三个月。"result.jpg",后一张把前一张覆盖得干干净净。
2026-11-05 11:07:44
179
原创 python的机器视觉技术与应用工业场景模拟第十四篇:用Python+OpenCV读取一张本地图片,分别展示原图,窗口展示图片,实现任意按键关闭窗口。
新来的实习生小王把工业相机接到工控机上,打开OpenCV写了三行代码读取一张电容电阻的实物照片,屏幕上却弹出一个灰突突的窗口,照片颜色发蓝,按ESC键也关不掉,只能强行结束进程。老师傅老周端着茶杯走过来:"你这代码在实验室跑Demo没问题,丢到产线上就是事故——工人拍下急停,画面卡死,整条线停三分钟,损失你赔?小陈调出参数表:200万像素全局快门CMOS,分辨率1600×1200,像元尺寸4.5 μm,镜头焦距25 mm,光圈F4,工作距离300 mm,视野范围约216 mm×162 mm。
2026-11-05 09:45:28
203
原创 python的机器视觉技术与应用工业场景模拟第十三篇:修复有轻微划痕的老旧图像,模糊淡化划痕瑕疵。
小陈把图像导入检测软件,阈值分割的结果里,划痕和密封圈表面的正常纹理混在一起,连边缘检测都分不清哪些是真实缺陷、哪些是划痕造成的伪边缘。"cv2.inpaint"实现的是基于快速行进(FMM)的修复算法,其中TELEA(Telea算法)会从划痕边界开始,沿着等照度线方向向外传播已知区域的像素信息,用边界周围的加权平均值填充划痕区域。第一步,把划痕"描"出来:划痕是又细又长的线,用形态学梯度(膨胀减腐蚀)可以把窄线状结构强化,因为膨胀会让线变粗、腐蚀会让线变细,两者相减刚好留下线本身。
2026-11-04 15:03:17
460
原创 python的机器视觉技术与应用工业场景模拟第十二篇:对逆光过暗的彩色图片做分通道增强,还原色彩细节。
小陈调出参数表:200万像素全局快门CMOS,分辨率1920×1080,像元尺寸4.5 μm,镜头焦距12 mm,光圈F2.8,工作距离800 mm,视野范围约600 mm×337 mm。下午两点,户外AGV的视觉导航工位。小陈盯着屏幕上的彩色图——阳光从车尾直射镜头,车身前方的地面标识牌一片漆黑,B、G、R三个通道的灰度都压在10~30之间,连白色引导线的边缘都看不清。分通道增强的思路很简单:把B、G、R三个通道拆开,各自独立做CLAHE,把每个通道的暗部灰度拉伸到合理范围,然后再合并回彩色图像。
2026-11-04 14:44:10
224
原创 python的机器视觉技术与应用工业场景模拟第十一篇:对比普通均衡化和自适应均衡化的图像增强效果差异。
CDF_min是第一个非零灰度级处的CDF值,不是cdf[0]——因为灰度0的像素数可能为0,此时cdf[0]=0会导致映射退化为CDF×255,与OpenCV结果产生系统性偏移。小陈调出参数表:500万像素全局快门CMOS,分辨率2592×1944,像元尺寸3.45 μm,镜头焦距50 mm,光圈F4.0,工作距离400 mm,视野范围约180 mm×135 mm。"他敲了敲键盘,"换成CLAHE——限制对比度自适应直方图均衡化,把图切成小块,每块单独做均衡化,再拼回去。亮区归亮区,暗区归暗区。
2026-11-04 11:18:22
126
原创 python的机器视觉技术与应用工业场景模拟第十篇:对昏暗灰度图做直方图均衡化,一键提高画面细节。
CDF是累积分布函数(小于等于该灰度的像素比例),CDF_min是CDF的最小值(即最暗灰度级的累积概率)。小陈调出参数表:200万像素全局快门CMOS,分辨率1600×1200,像元尺寸3.45 μm,镜头焦距35 mm,光圈F2.8,工作距离250 mm,视野范围约55 mm×41 mm。直方图均衡化就像把房间里的光线重新分配——把原本集中在亮处和暗处的光"拉"到中间所有亮度上,让每个亮度都有差不多的光。直方图均衡化把原本挤在一起的一小段灰度值,拉伸到0~255的整个范围,让图像的对比度变大。
2026-11-04 10:45:47
185
原创 python的机器视觉技术与应用工业场景模拟第九篇:提取垫片轮廓,对轮廓做最小外接矩形拟合,绘制包围框,输出矩形长宽,倾斜角度。
小陈调出参数表:200万像素全局快门CMOS,分辨率1600×1200,像元尺寸3.45 μm,镜头焦距35 mm,光圈F4.0,工作距离250 mm,视野范围约55 mm×41 mm。而如果你要用一个可以旋转的长方形纸盒刚好装下这个垫片,这个纸盒就是"最小外接矩形"——它可以在平面上任意旋转,找到面积最小的那个方向。对于椭圆垫片,最小外接矩形的宽对应椭圆的短轴方向,高对应长轴方向(或反之,取决于角度定义),角度直接反映了垫片的摆放姿态。可图像里的垫片是随意摆放的——有横的、竖的、斜的,还有互相挨着的。
2026-11-04 05:23:12
210
原创 python的机器视觉技术与应用工业场景模拟第八篇:PCB工件轮廓图,对检出轮廓计算轮廓面积,设置面积阀值,过滤面积过小的噪点轮廓。
"老周点点头:"对。轮廓面积(格林公式离散形式):对轮廓上相邻两点 (x_i, y_i) 和 (x{i+1}, y{i+1}),计算 x_i·y{i+1} - x{i+1}·y_i,把所有相邻点对的结果加起来,取绝对值除以2。丝印框的"线框面积"需要用外轮廓面积减去内轮廓面积(RETR_TREE模式),本篇不覆盖该计算,因此丝印框面积数值仅作演示,不代表实际线框面积。"先用仿真生成一块PCB的轮廓图,检出所有外轮廓,计算每条轮廓的面积,用面积阈值过滤掉噪点——注意看阈值怎么影响小元件的存活。
2026-11-03 14:29:50
271
原创 python的机器视觉技术与应用工业场景模拟第七篇:二值螺丝图像,查找全部外轮廓,绘制所有轮廓,打印每一条轮廓的轮廓点数量。
但开运算只能断开宽度小于结构元尺寸的细连接——如果两颗螺丝大面积重叠,3×3的核是掰不开的,那种情况得用距离变换加分水岭,后面篇章再讲。他翻开参数表:200万像素黑白CMOS,分辨率1600×1200,像元尺寸3.75 μm,镜头焦距12 mm,光圈F2.8,工作距离150 mm,视野范围约45 mm×33 mm。老周走过来,指着图像说:"二值化只是第一步,真正要数清楚,得靠轮廓查找。"先用仿真生成几颗螺丝的二值图,模拟细颈粘连场景,查找全部外轮廓,打印每条轮廓的点数,你就知道轮廓分析在分拣里怎么用了。
2026-11-03 10:17:48
223
原创 python的机器视觉技术与应用工业场景模拟第六篇:读取型材工件图,使用Laplacian算子提取边缘,对比sobel,分析其对噪声敏感的工程特点。
老周端着杯子走过来,指着45°方向的边缘说:"Sobel是求一阶导数,X和Y方向分开算,对水平和垂直边缘响应强,但45°方向的边缘会被低估。Laplacian是各向同性的,不管边缘朝哪个方向,响应都一样。L形拐角的45°方向边缘,Sobel的方向性会低估它,Laplacian不会,但裸用Laplacian等于把噪声当边缘提。他翻开参数表:500万像素黑白CMOS,分辨率2592×1944,像元尺寸2.2 μm,镜头焦距16 mm,光圈F4,工作距离300 mm,视野范围约120 mm×90 mm。
2026-11-03 09:54:15
99
原创 python的机器视觉技术与应用工业场景模拟第五篇:读取垫片图像,用sobel算子分别计算x方向,y方向梯度,合成梯度幅值并对比canny检测效果。
Sobel算子在X和Y方向分别算梯度,合成幅值之后,边缘在哪里、有多强,一目了然。他翻开参数表:500万像素黑白CMOS,分辨率2592×1944,像元尺寸2.2 μm,镜头焦距16 mm,光圈F4,工作距离200 mm,视野范围约80 mm×60 mm。两个方向的梯度合在一起,就是梯度幅值,代表边缘的"强度";Sobel X方向核:是一个3×3的矩阵,左列是-1、-2、-1,右列是+1、+2、+1,中间列全0。不可直接用于产线视觉系统。"arctan2(Gy, Gx)",单位是弧度,表示边缘的法线方向。
2026-11-03 09:28:06
217
原创 python的机器视觉技术与应用工业场景模拟第四篇:读取五金工件灰度图,调用canny边缘检测,调节高低阀值,可视化边缘图,观察边缘连续性变化。
高斯滤波就像给图像"磨皮",把那些孤立的噪点像素和它周围的邻居取加权平均,噪点就被拉平了。双阈值连接是最关键的一步:梯度值超过高阈值的叫"强边缘",确定保留;他翻开相机参数:500万像素黑白CMOS,分辨率2592×1944,像元尺寸2.2 μm,镜头焦距16 mm,光圈F4,工作距离200 mm,视野范围约80 mm×60 mm。σ越大,权重分布越宽,图像越模糊,噪声抑制越强,但边缘也会被"抹粗"。小陈拍下灰度图,调用Canny边缘检测,阈值设了50和150,结果边缘断断续续,缺口检测完全失效。
2026-11-03 08:51:48
158
原创 python的机器视觉技术与应用工业场景模拟第三篇:读取彩色工件图,完成BGR,RGB,HSV三种色彩空间互相转换,分别可视化三张转换后的图像。
人眼看颜色,靠的是视锥细胞对红、绿、蓝三种波长光的响应,这对应RGB空间。HSV空间把颜色信息拆成三样独立的东西:Hue(色调)是"这是什么颜色",Saturation(饱和度)是"颜色有多纯",Value(明度)是"有多亮"。他调出相机参数:200万像素CMOS,分辨率1600×1200,像元尺寸4.5 μm,镜头焦距12 mm,光圈F2.8,工作距离150 mm,视野范围约90 mm×67 mm。"H"由哪个通道是最大值决定:G最大则偏绿,B最大则偏蓝,R最大则偏红,再根据相邻通道的差值微调角度。
2026-11-02 16:49:07
266
原创 python的机器视觉技术与应用工业场景模拟第二篇:读取彩色PCB图像,实现RGB转灰度图,用matplotlib绘制原图与灰度图对比,保存灰度结果图。
他调出相机参数:500万像素全局快门CMOS,分辨率2592×1944,像元尺寸3.45 μm,C口镜头焦距16 mm,光圈F4.0,工作距离200 mm,视野范围约110 mm×82 mm。这样转出来的灰度图,亮度和人眼看到的"亮度"一致,后续做边缘检测、阈值分割时,阈值才选得准。"把RGB转灰度封装成类,用标准加权系数,用matplotlib把原图和灰度图并排画出来,再把灰度图存成文件——后面第三篇做边缘检测就有干净输入了。对偏蓝图像会偏亮,对偏红图像会偏暗,仅适合快速预览,不适合工业测量。
2026-11-02 16:21:59
150
原创 python的机器视觉技术与应用工业场景模拟第一篇:读取本地工业工件图片,分别输出原图的宽,高,通道数,像素数据类型,打印图像矩阵的形状信息。
他调出相机参数:2000万像素全局快门CMOS,分辨率5472×3648,像元尺寸2.4 μm,C口镜头焦距12 mm,光圈F2.8,工作距离300 mm,视野范围约180 mm×120 mm。一台2000万像素的工业相机正对着传送带上的铝合金壳体拍照,上位机屏幕弹出红色报警:"图像尺寸异常,宽度0,无法进入边缘检测流程。输入:本地工业工件图片路径。"cv2.imread(path, cv2.IMREAD_COLOR)",无论源文件是灰度还是彩色,读出来的都是3通道BGR图像(灰度源会被复制到三个通道)。
2026-11-02 14:15:26
84
原创 (终极篇)python的机器人基础原理工业场景模拟第一百四十篇:机械臂故障模拟,某一关节力矩达到上限饱和,记录饱和状态下轨迹跟随偏差。
末端工具质量1.5 kg,PD增益Kp=[500, 350] N·m/rad,Kd=[35, 25] N·m·s/rad,重力9.81 m/s²。关节力矩饱和就是这个道理——控制器算出来需要60 N·m,但驱动器只能给50 N·m,多出来的10 N·m根本不存在,关节只能按50 N·m能提供的加速度运动,于是实际角度开始落后于期望角度。G是按期望构型计算的重力前馈。"""末端位置 x = l1·cos(q1) + l2·cos(q1+q2), y = l1·sin(q1) + l2·sin(q1+q2)。
2026-11-02 10:40:46
217
原创 python的机器人基础原理工业场景模拟第一百三十九篇:装配产线仿真,统计闭环运动中最大误差,平均误差,均方根误差三类评价指标。
科氏力向量(Spong标准结论):在M·qdd + C + G = τ约定下,C1 = -h·sin(q2)·(2·qd1·qd2 + qd2²),C2 = h·sin(q2)·qd1²,其中h = m2·l1·r2 + mt·l1·l2。PD+重力前馈控制律:τ = Kp·(q_des - q) + Kd·(qd_des - qd) + G(q_des)。"""末端位置 x = l1·cos(q1) + l2·cos(q1+q2), y = l1·sin(q1) + l2·sin(q1+q2)。
2026-11-02 09:24:23
239
原创 python的机器人基础原理工业场景模拟第一百三十八篇:全套工艺仿真,复现完整码垛流程,输出力矩,角度,末端误差整套仿真报告数据。
抓具1.5 kg,料箱2.0 kg,PD增益Kp=[400, 300, 150] N·m/rad,Kd=[40, 30, 15] N·m·s/rad,重力9.81 m/s²。"小赵放大曲线:"抓取前是空载动力学,抓取后一瞬间等效惯量和重力都变了,如果仿真里全程带着2 kg负载跑,返回段的力矩曲线就是假的——它应该在放置后就降下来。处理:RK4积分真实动力学,负载在指定时刻切换。"把单循环跑一遍,负载在抓取段起点切入、放置段终点切出,输出力矩、角度、末端误差整套数据,看看峰值力矩和末端偏差到底在什么水平。
2026-11-01 18:21:16
249
原创 python的机器人基础原理工业场景模拟第一百三十七篇:机械臂仿真,记录PD控制下期望角度,实际角度,输出误差随时间变化曲线。
"上位机弹出关节1的实际角度曲线,小赵盯着屏幕:"期望角度是一条平滑的三次多项式,起步段速度从零开始、到位时速度也回到零,但实际控制力矩在起步段末端有明显跳变,角度误差曲线在0.5 s处出现一个尖峰。轨迹平滑性很关键:如果起步段末端速度不为零,进入保持段时速度突然归零,期望速度跳变会让微分项瞬间输出一个巨大的"刹车"力矩,角度误差曲线上会出现一个尖峰。起步段:q(t) = a·t³ + b·t²,满足q(0)=q_start, qd(0)=0, q(T)=q_target, qd(T)=0。
2026-11-01 18:03:16
126
原创 python的机器人基础原理工业场景模拟第一百三十六篇:产线仿真,模拟D-H参数存在标定偏差,观察闭环状态下末端姿态误差变化。
"小赵打开仿真脚本,"建一个3R竖直平面模型,连杆质量8.0 kg / 5.0 kg / 2.0 kg,长度0.55/0.45/0.30 m,转动惯量0.60/0.18/0.05 kg·m²,质心0.28/0.22/0.15 m。D-H参数是描述连杆几何关系的"户口本"。另一部分来自长度偏差Δl,它改变运动学映射,控制器逆解算出的关节角与实际需要的不同,PD能抑制一部分,但重力前馈失配会留下稳态残余。D-H标定偏差模型:真实连杆长度 = 名义长度 + Δl,真实零位 = 名义零位 + Δq_offset。
2026-11-01 10:00:56
176
原创 python的机器人基础原理工业场景模拟第一百三十五篇:重复定位仿真,多次执行同一目标点位闭环运动,统计末端点位离散误差。
上一轮结束时的残余振动成为下一轮的初始扰动。调试工程师小刘翻出参数:"2R平面构型,L1=0.55 m / L2=0.45 m,连杆质量8.0 kg / 5.0 kg,转动惯量0.60 kg·m² / 0.18 kg·m²,质心0.28 m / 0.22 m,末端负载2.0 kg。每次循环:从上一轮结束的实际状态出发,经过0.8 s的5阶多项式点到点运动,到位后保持2.0 s,然后进入下一轮。5阶多项式轨迹:q(t) = a0 + a1·t + a2·t² + a3·t³ + a4·t⁴ + a5·t⁵。
2026-11-01 08:47:41
138
原创 python的机器人基础原理工业场景模拟第一百三十四篇:焊接直线轨迹仿真,笛卡尔路径经过奇异附近,统计全程末端位置跟踪误差。
"控制工程师老周调出离线仿真,"2R平面构型,L1=0.55 m / L2=0.45 m,连杆质量8.0 kg / 5.0 kg,转动惯量0.60 kg·m² / 0.18 kg·m²,质心0.28 m / 0.22 m,末端负载2.0 kg。轨迹从(0.98 m, 0.05 m)水平走到(0.70 m, 0.10 m),中途经过q2≈0的奇异区域——此时雅可比最小奇异值趋近0,末端几乎失去一个方向的运动能力。κ越大,矩阵越接近奇异,单位关节运动产生的末端位移越小,控制器的等效笛卡尔刚度越低。
2026-11-01 07:25:53
166
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅