Python OpenCV实现摄像头调用与颜色识别

纸上星河
纸上星河
发布时间:2026-10-14| 6人浏览过
原创

本文介绍如何在Ubuntu环境下使用Python和OpenCV库调用摄像头,并实现基础的视频流显示、蓝色背景检测以及复杂的多颜色识别算法。通过具体代码示例,展示从环境配置到实际应用的完整流程,帮助开发者快速掌握机器视觉基础。

Python OpenCV环境配置与摄像头调用

近期因专注于个人项目,更新有所延迟。在近期的开发工作中,发现Python的应用场景极为广泛且操作便捷,因此决定投入时间学习。在此分享今日的学习心得与实践成果。

本教程的运行环境为Ubuntu 14.0.4。

首先进行Python环境的安装,本文使用的是Python 2.7版本。安装过程十分简单,仅需一条指令即可完成。

sudo apt-get install python-dev

通常情况下,系统预装时已包含Python,此步骤可省略。接下来安装python-opencv库,后续将依赖该库进行图像处理和摄像头调用。这也是Linux系统高效便捷的一个体现。

sudo apt-get install python-opencv

环境准备就绪后,开始编写代码。首先实现打开摄像头并显示画面的功能。使用vim编辑器创建pythonpractice.py文件,粘贴以下代码。请注意,Python对缩进有严格要求,下文代码均使用四个空格进行缩进,请确保复制时格式正确。


lmport cv2
import numpy as np#添加模块和矩阵模块
cap=cv2.VideoCapture(0)
#打开摄像头,若打开本地视频,同opencv一样,只需将0换成("×××.avi")
while(1): # get a frame 
 ret, frame = cap.read() # show a frame 
 cv2.imshow("capture", frame) 
 if cv2.waitKey(1) & 0xFF == ord('q'):  
  break
cap.release()
cv2.destroyAllWindows()
#释放并销毁窗口

保存文件并退出编辑器。

在终端执行命令:python pythonpractice.py

基于HSV空间的蓝色背景检测

此时屏幕上应显示摄像头捕捉到的画面。接下来,我们将增加几行代码,实现蓝色背景的检测功能。以一瓶蓝色脉动饮料为例进行实验。


import cv2
import numpy as np
cap = cv2.VideoCapture(0)# set blue thresh
lower_blue=np.array([78,43,46])
upper_blue=np.array([110,255,255])
while(1): # get a frame and show 
 ret, frame = cap.read() 
 cv2.imshow('Capture', frame) # change to hsv model 
 hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # get mask 
 mask = cv2.inRange(hsv, lower_blue, upper_blue) 
 cv2.imshow('Mask', mask) # detect blue 
 res = cv2.bitwise_and(frame, frame, mask=mask) 
 cv2.imshow('Result', res) 
 if cv2.waitKey(1) & 0xFF == ord('q'):  
  breakcap.release()
cv2.destroyAllWindows()

再次运行python pythonpractice.py,可以将手机屏幕或其他物体作为蓝色背景进行测试。代码逻辑较为简单,建议读者自行理解其原理。

复杂多颜色识别与轮廓提取

下面提供一个更为复杂的颜色识别代码示例。


#!/usr/bin/python
# -*- coding: utf-8 -*-
import cv2
import numpy as np
import time
readlower=np.array([156,179,144])
readupper=np.array([180,255,255])
readlower1 = np.array([0, 128, 146])
readupper2 = np.array([5, 255, 255])
lowerarry=[[readlower,readupper,'red'],[readlower1,readupper2,'red1']]
capture=cv2.VideoCapture('4.mp4')
while True:
 ret,frame=capture.read()
 print frame.shape
 frame=cv2.resize(frame,(640,480))
 if ret==False:
  print("video is erro")
 #cv2.imshow('xiaorun',frame)
 hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
 for colormin,colermax,name in lowerarry:
  mask=cv2.inRange(hsv,colormin,colermax)
  #res = cv2.bitwise_and(frame, frame, mask=mask)
 #mask=cv2.erode(mask,None,iterations=1)
 mask=cv2.dilate(mask,None,iterations=25)
 ret, binary = cv2.threshold(mask,15, 255, cv2.THRESH_BINARY)
 cv2.imshow('result',binary)
 kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (21, 7))
 closed = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel)
 cv2.imshow('closed', closed)
 #erode = cv2.erode(closed, None, iterations=4)
 #cv2.imshow('erode', erode)
 dilate = cv2.dilate(closed, None, iterations=50)
 cv2.imshow('dilate', dilate)
 _,contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
 #res=_.copy()
 for con in contours:
  x, y, w, h = cv2.boundingRect(con) # 将轮廓分解为识别对象的左上角坐标和宽、高
  # 在图像上画上矩形(图片、左上角坐标、右下角坐标、颜色、线条宽度)
  cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0,0), 3)

 cv2.imshow('res',frame)
 key=cv2.waitKey(1)
 if key==ord('q'):
  break

旨在强调学以致用,编程语言的学习不应仅停留在语法层面,通过实际项目动手实践才是掌握的关键。祝各位在机器视觉领域玩得开心。

以上是利用Python调用摄像头及进行颜色检测的完整内容,希望能对读者有所帮助,欢迎支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。