Python
文章平均质量分 56
老李的森林
老李,自由职业,主要工作是方案设计,定制开发,包括机械设计(UG),电路设计(Altium),嵌入式开发(STM32,MSP430,软硬件开发),电脑端软件开发(Python,Delphi)。主要工作方向是3D打印机设计,自动化设备的开发,并联机器人的设计开发。
展开
-
Python opencv进行矩形识别
图像识别中,圆形和矩形识别是最常用的两种,本例讲解矩形识别,最后的结果是可以识别出圆心,4个顶点,如下图:左边是原始图像,右边是识别结果,在我i5 10400的CPU上,执行时间不到8ms。识别出结果后,计算任意3个顶点的彼此距离,共3个数据,其中数值最小值对应的2个顶点是短边,数值最大的2个顶点对应矩形的对角线,中间那个值的矩形的长边。如果是正方形,则最小值和中间值相等。知道了长边的2个点,也就很容易求得矩形的旋转方向,在机器人捡拾物品的过程中,也就知道了末端执行器的旋转角度值。原创 2023-02-23 18:43:16 · 5434 阅读 · 2 评论 -
Python opencv进行圆形识别(圆检测)
圆形识别(圆检测)是图像识别中很常见的一种处理方式,最核心的是cv2.HoughCircles这个函数实现的圆形检测。原创 2023-02-20 09:00:00 · 22231 阅读 · 0 评论 -
Python 获得摄像头捕捉的图像
很多时候,我们都需要通过摄像头捕获图像,以便进行处理,在这里分享的是通过OPEN CV这个库来实现。原创 2023-02-13 09:00:00 · 2007 阅读 · 0 评论 -
python字符串转list,多维度,支持float,并保持原数据结构
python编程中用到通讯,也自然需要用到字符串转list功能,试过了很多方法均不理想,最后不得已用了神通广大的eval()要将这一个字符串,转为list或ndarray,维度不定,长度也不定,里面内容不是int,而是float。网上找到很多方法,但都有局限,最后要么是维度限制,要么是长度限制,要么是int限制,要么就不能识别方括号。......原创 2022-08-01 11:28:05 · 738 阅读 · 0 评论 -
python的任务调度问题
Win10系统,python编程,进行双摄像头采集识别,用到了opencv,由于opencv不支持多进程编程,故而用多线程方式。程序刚启动时速度很快,但随着时间的推移,几分钟后程序变得很慢,,其间没有其他操作,也没有其他软件干扰。下图发现,CPU的使用率从最开始的60%,一直降到20%,为初始的1/3,而帧率从10+掉到1帧以下,运行效率为1/10,不是应该降到3.3帧才对的么?......原创 2022-07-27 13:52:32 · 1531 阅读 · 0 评论 -
HALCON和OPENCV最终选择了后者
经过一段时间的评估,还是放弃了HALCON,HALCON有很多算子使用很方便,直接调用即可,还有很多图形化的工具,直接就可以调节参数,并看到结果。运行的中间变量也会有直观的图形可供查看原创 2022-07-18 14:14:00 · 9588 阅读 · 4 评论 -
镜头标定板秩事
我的主显示器是三星的,显示上面这个图,6个格子宽度,用卡尺测量为203mm,而高度是198.2mm,长宽比为1.024,也就是说宽了2.4%这是一个不可忽视的值了,以前从来没有想过这个问题。做视觉识别的工作时,我们需要一个标定板,标定板也可以采购,也可以打印。用Coreldraw画了一个如上图,最后识别出来在屏幕上查看长宽比却不对,最后发现是显示器的长宽比误差。于是准备用手机或平板来做标定板,因为这玩意是很准的,用来做镜头校正精度妥妥的好。也可以采购成品标定板,一般是从几十到几百,似乎也没有必要。.....原创 2022-07-15 17:30:11 · 380 阅读 · 0 评论 -
python对数据的定义与分配与我们想像的不同
举例:第3行代码:你以为的是仅仅修改了B,但没有修改A,A还应该是是最初的[1,2,3,4,5],但运行结果却是:[1, 2, 0, 4, 5][1, 2, 0, 4, 5]A和B同时发生了改变这也说明Python的所有操作都是通过指针来进行,这样也就可以解释为什么A和B同时变化了,因为它们本 质上都是指针而已,只是指向了同一个地址,并没有为b分配内存空间。如果想要为b分配空间,并单独改变B该怎么办呢运行结果:[1, 2, 3, 4, 5][1, 2, 0, 4, 5]OK了...原创 2022-07-07 09:03:56 · 209 阅读 · 0 评论 -
halcon:读取摄像头并二值化
打开Halcon,点击摄像头图标,打开设置窗口,接口选择DirectShow连接选项卡中点击“实时”按钮,可以在主界面中看到摄像头采集的画面最后点代码生成按钮,采集单幅图像,异步,插入代码,即可看到主界面有代码生成在图像窗口上点右键,工具,灰度直方图,打开直方图窗口点RGB选择2号通道,也就是绿色通道,会变成单色显示随便设置一个最小化的值,比如50,可以看到直方图上多出来一条绿色的竖线,点击下图的这个按钮再拖动这条绿色的竖线,即可看到二值化分割的效果,绘画中选择Fill或Margin原创 2022-06-28 09:41:25 · 953 阅读 · 0 评论 -
Python PYQT5中用Label控件显示以numpy表示的灰度图像
Python PYQT5中用Label控件显示以numpy表示的图像说明:img 是单色的灰度图像,PYQT5应该是可以直接显示的,但是可能我没有搞对方法,始终不能正常显示,无奈之下只好将其先转为RGB,再以RGB方式显示。下面这个图太形象了......原创 2022-06-05 17:10:57 · 1427 阅读 · 4 评论 -
python pycharm中使用opencv时,没有代码自动补全提示
今天工作时突然发现,在写OPENCV相关代码时,没有自动补全提示了,只有几个最最基本的补全函数。开始以为是opencv坏了,一通折腾搞不定,又把pycharm重装,还是不行,又把Python重装还是不行。甚至还安装了anaconda都还是不行,之前一直是通过pip3进行安装库文件。最后发现,似乎是pycharm自动升级之后造成的问题,需要将opencv代码进行修改。Ctrl按住,再点cv2,进入__init__.py文件,是下图这样的需要添加如下代码然后保存,重启pycharm,一切正常如初.原创 2022-06-04 20:24:26 · 9011 阅读 · 17 评论 -
Python PyQt5在Pycharm中的安装
找一个不是最新的版本,否则PyQt5可能不支持,比如现在Python出到3.10,但是Pyqt5就始终安装不上,最后装了个3.9搞定。这个是将Designer设计好的界面,转为python可以执行的“.py”文件,很奇怪为啥不把这两个工具合2为1,直接输出py文件。设计完成后,点保存,会生成一个*.ui文件,如下图,点右键,externtools,再选第2项UIC工具,即可生成一个*.py文件。还要注意,Python安装时,初始界面要选自定义安装,然后勾选最下面的添加路径选项。............原创 2022-06-03 18:08:37 · 5230 阅读 · 0 评论 -
6轴并联机器人的拖动示教功能
6轴并联机器人的拖动示教功能,人工操作操作一次,机器人重复千万次,省去大量人工重复作业,机器替代人工是未来的趋势,机器人的开发已接近尾声,未来可期。#6轴并联机器人 #6轴机器人 #并联机器人 6轴并联机器人的拖动示教功能,人工操作一 ...原创 2022-05-20 11:06:52 · 852 阅读 · 0 评论 -
6轴并联机器人开发----系列
6轴并联机器人开发6轴并联机器人简介机械设计电路设计单片机控制软件电脑端的控制界面这是2021年的工作展望,只是一个工作期望,具体实现会有很多因素会延期,由于我的工作是不定期的承接项目开发,所以有新项目到来,就干活挣钱,交完活了才能做自己计划的事情。所以这个项目极有可能延期。本帖先占个楼,其实相关的工作已经做了一些了,春节期间会大概整理一下。后续不定时更新6轴并联机器人简介机械设计电路设计单片机控制软件电脑端的控制界面...原创 2021-02-11 10:59:34 · 2201 阅读 · 4 评论 -
python实现亚毫秒(微秒)级延时
python实现亚毫秒(微秒)级延时python的常用延时函数为time.sleep,最小延时精度为0.001,即time.sleep(0.001)毫秒,在windows10操作系统下,逻辑分析仪实测延时为13毫秒,我的CPU不算差了,是Intel i5 10400F,期望延时从1毫秒变成了13毫秒,对于某些应用来说不能忍受.逻辑分析仪波形如下:有一个time.time()函数,能够得到小数点后7位,我们可以通过这个函数来得到精确得多的延时结果.用以下代码代替time.sleep(0.001)这个原创 2022-03-07 21:34:17 · 14837 阅读 · 5 评论 -
Python将一个负数(int)转换为字节表示的s16
Python将一个负数(int)转换为字节表示的s16正数转换为字符串可以使用str()函数,如0x123转换之后就是‘123’如果想要编码,并输出到单片机,并用s16格式表示,则可以这样a = 0x123high = int(a / 256)low = a % 256print("%#x"%high, '%#x'%low)输出结果:0x1 0x23但负数这样做就不行,举例,将 -35转换为s16,正确的应该是0xffdd输出结果:0x0 0xdd发送给单片机时,应该是0xff,原创 2022-02-28 11:51:12 · 1865 阅读 · 0 评论 -
电脑不识别STM32的USB虚拟串口
电脑不识别STM32的USB虚拟串口现象板子和电脑联调的时候发现,USB线插入板子以后电脑不识别虚拟串口,通过禁用设备再启用,可以正常工作。也可以按一下复位键才能识别。以前似乎没有这个问题,但记不清具体情况了。电路D+通过1.5K电阻上拉, 调试时整个板子通过与电脑连接的USB口供电, 即插上USB线才开始供电。查找由于通过禁用,启用能正常工作,于是有了上一篇文章python–禁用、启用串口设备。后来发现,如上操作之后,有时候仍然不能正常工作,表现为设备管理器中该设备为未识别的设备,于是判原创 2022-01-28 10:31:33 · 18837 阅读 · 0 评论 -
python--禁用、启用串口设备
python禁用并使能串口设备最近在做一个设备,需要用到单片机的USB虚拟串口,并不是用的CH340之类的转换芯片,而是用的MCU的USB接口与电脑相连。在调试的过程中,由于要不断的复位和上电,电脑上的串口就总是处于不可用的状态,必须将端口禁用,再启用,才能正常工作。而MCU一旦复位,电脑上又得重来一遍。所以就想着将这个动作集成到我的上位机软件中。获得设备ID手动获取可以通过设备管理器,在相应设备上右击,设备属性–详细信息–设备实例路径,USB\VID开头的一整串字符就是ID了。自动获取的代码如下原创 2022-01-26 12:50:43 · 3493 阅读 · 6 评论 -
python--串口通信
Python之串口通信串口通信是嵌入式工程师的必备技能,如果能自己写一个简单的上位机的话,肯定会加分不少。本系列是把相关的工作做个记录,毕竟Python不是经常用,老是忘记很多东西。用的时候总是重头再学一遍太麻烦了。毕竟3个月以后,自己写的程序也如同天书一般。开发环境:Python版本是最新的3.10.1,编译和调试用的是PyCharm2021.4社区版,需要用到的库:串口通信库pyserial,命令行:pip3 install pyserial回车即可安装。串口设备:自己的STM32板子各原创 2022-01-15 11:52:26 · 27443 阅读 · 1 评论 -
6轴并联机器人开发--进展
到年底了,终于有时间来进行我的并联机器人项目,目前在电脑端把位置算法解决了,这是用python写的一个模拟程序。示意图如下这是初始位置:以三轴方式运行,即没有姿态控制时,上平台和下平台是平行的,每2个一组的主动臂也是平行的,其末端是在同一高度,如下:当加入姿态控制即下平台绕xyz轴均可旋转一定角度时,每2个一组的主动臂的运行不再平行,其末端(也就是主动臂的偏转角)显然不在同一高度,上下平台也不再平行,如下:机械部分,UG画的实物,部分结构件用我自己做的3D打印机打印完成电路板,用原创 2021-12-26 17:24:24 · 887 阅读 · 2 评论 -
PyQT5生成无标题栏的界面,Designer篇
网上有很多设置为无标题栏的方法,但都是基于全手写代码的,并没有针对Designer这个GUI工具的设置方法。由于Designer生成的界面是继承自object类的,在Designer中并没有相关的设置项,改起来不太方便。我的做法如下1 Designer生成的界面为main_ui.ui,经过Uic工具转换以后的文件名为main_ui.py2 新建一个display_ui.py,开头增加 from PyQt5.QtCore import Qt 这一行3 从main_ui.ui中再继承一下,并增加设置无原创 2020-09-04 15:15:43 · 2744 阅读 · 4 评论