在本系列上一篇文章中,我们为大家展示了如何通过 OpenCV 调用 CSI/USB 摄像头,在本篇文章中,我们将向大家介绍如何执行常见机器视觉应用。
在上一篇文章中,已经简单说明了图像处理与计算机视觉的差异,并且在 Jetson Nano 2GB 上,结合 CSI 摄像头与 JetPack 所提供的 OpenCV 4.1.1 版本,实现了三种最基础的应用。每个 Python 代码都只需要 10+ 行就可以,让大家轻松感受到 Jetson Nano 2GB 的开发便利性。
本篇内容主要是在 Jetson Nano 2GB 上运用 OpenCV,执行三个有特色的计算机视觉应用,这部分会很频繁的运用到色彩空间(color space)转换技巧,在 OpenCV 上只需要一道“cv2.cvtColor()”指令就可以实现,非常简单。
接下来就开始本文的实验内容。
追踪特定颜色物件
本范例追踪“绿色”物体,执行步骤如下:
先找出“绿色”的 HSV 颜色范围,本处定在[50,100,100]至[70,255,255]
将读入的图像(frame)透过 cv2.cvtColor() 转成 HSV 格式,存到 hsv 变量
用 cv2.inRange() 函数找出 hsv 的掩码,存到 mask 变量
用 cv2.bitwize_and() 函数将 frame 与 mask 进行 AND 计算,过滤掉“非绿”部分,将结果存到 detect 变量
将原图(frame)、掩码(mask)与结果(detect) 显示在画面上
执行结果如下:
边缘检测(Edge Detection)
执行步骤如下:
这个计算必须将图像转成灰度图像,才能计算出每个物件的边缘线条
将读入的图像(frame)透过 cv2.cvtColor 转成 HSV 灰度图像,存到 hsv 变量
为了降低图形的噪点,因此需要将 HSV 灰度图进行高斯模糊(降噪)处理,直接调用 cv2.GaussianBlur() 函数进行转换,将图像存到 blur 变量中
最后调用 cv2.Canny() 函数为 blur 图像找出边际线条,存入 edges 变量中
为了显示过着中所有图像,因此先将每张图像都调整尺寸为(640,480),然后执行三次 np.concatenate() 函数,将四张图像集成为一张,便于显示。
执行结果如下:
人脸追踪+眼睛追踪
这个代码调用 OpenCV 自带的 HaarCascade 算法分类器,调用方式也很简单,需要指定脸部分类器(classifier)的位置,在 /usr/local/share/opencv4/haarcascades 下面,里面提供将近 20 种分类器,可以按照需求变更。
这个范例也将“眼睛”识别分类器放进去,并且嵌套在脸部识别的循环里面,因为眼睛一定在脸里面,这样可以做的更丰富些。
详细代码如下:
执行结果如下:蓝色框代表找到的“脸”,绿色框表示“眼睛”。
好文章,需要你的鼓励
TechCrunch Disrupt 2025 AI舞台将汇聚塑造科技未来的领军人物,顶尖风投将揭示在快速变化的AI领域获得融资的关键。来自Apptronik、ElevenLabs、Hugging Face、Runway等创新企业的领导者将分享前沿洞见,探讨AI如何重塑创意过程、改变物理世界、变革国防安全和重新定义人际关系。10月27-29日,五大主题舞台将在旧金山呈现科技创新的未来图景。
西班牙研究团队提出了一种创新的AI自我纠错方法SSC,让人工智能学会识别和修正规则中的漏洞。当AI发现自己在钻空子获得高分时,它会反思规则的合理性并主动改进。实验显示这种方法将AI的"钻空子"行为从50-70%降低到3%以下,同时提升了回答质量。这项技术有望让AI从被动执行指令转变为能够质疑和改进指令的智能协作伙伴。
英超联赛与微软达成五年战略合作伙伴关系,推出AI驱动的Premier League Companion服务,为全球球迷提供个性化体验。该服务利用Azure OpenAI技术,整合30多个赛季的统计数据、30万篇文章和9000个视频,帮助球迷发现和了解更多内容。未来还将为Fantasy Premier League引入个人助理经理功能,并通过Azure AI优化比赛直播体验和赛后分析。
这篇文章详细解析了Long、Shelhamer和Darrell在2015年CVPR会议上发表的开创性研究"全卷积网络用于语义分割"。文章以通俗易懂的方式,将这项复杂的技术比作艺术家的绘画过程,解释了如何让计算机不仅识别图像中有什么物体,还能精确标出每个物体的位置和边界。研究团队通过将传统分类网络改造为全卷积形式,并巧妙运用上采样和跳跃连接技术,实现了高效准确的像素级图像理解。这一突破为自动驾驶、医学影像和增强现实等领域带来了革命性变化,奠定了现代计算机视觉的重要基础。