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

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

本文介绍如何在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 相关产品和应用

全部下载

专题列表