分享

Python3 Opencv 学习笔记(四)摄像头捕获图像 摄像头图像处理识别

 印度阿三17 2020-06-14

图片能处理和识别了,接下来就是摄像头了

import cv2
import numpy as np
import matplotlib.pyplot as plt

cv2.namedWindow("Photo_Detect")  #定义一个窗口
cap=cv2.VideoCapture(0) #捕获摄像头图像  0位默认的摄像头 笔记本的自带摄像头  1为外界摄像头
while(True):                  #值为1不断读取图像
    ret, frame = cap.read()  #视频捕获帧
    cv2.imwrite('cap_RGB.jpg',frame)     #写入捕获到的视频帧  命名为cap_RGB.jpg
    cv2.imshow('Photo_Detect',frame)     #显示窗口 查看实时图像
    #按S 读取灰度图
    if (cv2.waitKey(1) & 0xFF) == ord('S'): #不断刷新图像,这里是1ms 返回值为当前键盘按键值
        gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) #RGB图像转为单通道的灰度图像
        gray = cv2.resize(gray,(640,480)) #图像大小为640*480
        cv2.imshow('cap',gray)              #显示灰度图窗口
        cv2.imwrite('cap.jpg',gray)         #写入灰度图  

    if cv2.waitKey(1) & 0xFF == ord('Q'):   #按Q关闭所有窗口  一次没反应的话就多按几下
        break
#执行完后释放窗口
cap.release()
cv2.waitKey(0)
cv2.destroyAllWindows()

效果如下
在这里插入图片描述
可以识别摄像头当前所看到的图像
按一下S
输出灰度图
在这里插入图片描述
视频读取没什么问题了

接下来是结合之前的图像处理 对摄像头图像进行实时处理

实现原理很简答
把摄像头读取一帧,存储一帧的数据进行处理 然后输出
因为机器处理的速度的很快 可以对每一帧 每一个图像进行处理
所以看起来效果就是实时处理摄像头的所显示的视频

测试的效果
在这里插入图片描述
在这里插入图片描述
移动物品 框会跟着动
一样的按Q退出

最后附上所有代码

import cv2
import numpy as np
import matplotlib.pyplot as plt

#高斯滤波
def GausBlur(img):
    gaus = cv2.GaussianBlur(img,(5,5),2)   #(5, 5)表示高斯矩阵的长与宽都是5,标准差取2
    return gaus

#灰度处理
def Gray_img(gaus_img):
    gray = cv2.cvtColor(gaus_img,cv2.COLOR_BGR2GRAY)
    return gray

#开运算操作
def open_mor(binary):
    kernel = np.ones((6,6),np.uint8)   #8 8 数字可以自己改变加以调整效果  数字越大强度越高
    opening = cv2.morphologyEx(binary,cv2.MORPH_OPEN,kernel, iterations=5) #iterations进行7次操作  次数越多效果越强 
    return opening

#定义一个图像处理函数
def img_disapose():
    #捕获存储完图像之后 对图像进行处理
    #读取上面存储的图片
    img = cv2.imread('cap_RGB.jpg')   #0为灰度,1为彩色
    img = cv2.resize(img,(640,480))   #设置窗口大小
    #高斯滤波
    gaus_img = GausBlur(img)
    #灰度处理
    gray_img = Gray_img(gaus_img)
    #二值化处理
    ret , binary = cv2.threshold(gray_img ,148 , 255 , cv2.THRESH_BINARY)  #148  255 为设置阈值
    #开运算操作
    open_img = open_mor(binary)
    #颜色反转一下
    open_img=~open_img
    #轮廓检测
    contours, hierarchy = cv2.findContours(open_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)  
    print('hierarchy',hierarchy)
    #描绘轮廓
    c = sorted(contours, key=cv2.contourArea, reverse=True)[0]
    rect = cv2.minAreaRect(c)
    box = np.int0(cv2.boxPoints(rect)) 
    #重点 这里的img要换成frame
    cv2.drawContours(frame, [box], -1, (0, 255, 0), 3)
    cv2.putText(frame, 'xuebi',(box[0][0],box[0][1]) , cv2.FONT_HERSHEY_SIMPLEX, 2, (0,0,255), 1)
 
cv2.namedWindow("Photo_Detect")  #定义一个窗口
cap=cv2.VideoCapture(1) #捕获摄像头图像  0位默认的摄像头 笔记本的自带摄像头  1为外界摄像头
while(True):                  #值为1不断读取图像
    ret, frame = cap.read()  #视频捕获帧
    cv2.imwrite('cap_RGB.jpg',frame)     #写入捕获到的视频帧  命名为cap_RGB.jpg
    img_disapose()  #图像处理
    cv2.imshow('Photo_Detect',frame)     #显示窗口 查看实时图像
    
    if cv2.waitKey(1) & 0xFF == ord('Q'):   #按Q关闭所有窗口  一次没反应的话就多按几下
        break
  
#执行完后释放窗口
cap.release()
cv2.waitKey(0)
cv2.destroyAllWindows()

觉得有用的不妨点个赞

来源:https://www./content-1-710401.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多