书接上回,这次我们利用Aidlux调用手机摄像头玩转OpenCV

这篇文章中,我们主要完成以下几项任务:
一、我们讲解一下利用OpenCV自带的功能来调用手机摄像头实时拍照、实时逐帧捕捉手机摄像头所拍摄的画面(我们直接讲一个稍微有一点难度的代码,即Canny边缘检测,同理,霍夫直线检测也是相同的道理,我们在这里就不过多啰嗦了)
二、将写好的代码文件通过Aidlux自带的传输文件的端口,从本地上传到手机/home文件目录下
三、在软件自带的终端上运行我们写好的python文件
四、最后,我们利用Aidlux自带的launch-build应用,将我们写好的python代码成功创建成桌面应用,并从桌面运行启动,至此,我们今天的任务就告成了!!!

正文
一、讲解代码:
import cv2
import numpy as np
from cvs import *
import matplotlib.pyplot as plt
import time
import matplotlib 



## 初始化摄像头
# 摄像头ID 0-后置 1-前置
Camera_ID = 0

# 获取摄像头信息
cap = cvs.VideoCapture (Camera_ID)


## 逐帧处理函数(选择一个运行)

# 逐帧处理函数,默认不进行任何处理,直接将摄像头捕获的画面写入视频帧

# 一、什么都不改动,直接获取手机摄像头画面进行展示
# def process_frame(img_bgr):
#     '''输入BGR格式的 numpy array,输出BGR格式的 numpy array'''
#     # img_bgr = img_bgr[:,:,::-1] # BGR转RGB
#     return img_bgr


# 二、 Canny 边缘检测
# def process_frame(img_bgr):
#     '''输入BGR格式的 numpy array,输出BGR格式的 numpy array'''
#     img_bgr = cv2.Canny(img_bgr, 100, 200)
#     img_bgr = np.dstack((img_bgr, img_bgr, img_bgr))
#     return img_bgr


# 三、 Canny 边缘检测 - 写 FPS 数值
# def process_frame(img_bgr):
#     '''输入BGR格式的 numpy array,输出BGR格式的 numpy array'''

#     # 记录该帧开始处理的时间
#     start_time = time.time()

#     # 逐帧处理操作
#     img_bgr = cv2.Canny(img_bgr, 100, 200)
#     img_bgr = np.dstack((img_bgr, img_bgr, img_bgr))

#     # 记录该帧处理完毕的时间
#     end_time = time.time()
#     # 计算每秒处理图像帧数FPS
#     FPS = 1/(end_time - start_time)

#     # 在画面上写 FPS 数值
#     end_time = time.time()
#     FPS = 1/(end_time - start_time) # 计算每秒处理图像帧数FPS
#     FPS_string = 'FPS {:.2f}'.format(FPS) # 写在画面上的字符串
#     img_bgr = cv2.putText(img_bgr, FPS_string, (25, 100), cv2.FONT_HERSHEY_SIMPLEX, 1.25, (255, 0, 255), 2) # 在画面上写字:图片,字符串,左上角坐标,字体,字体大小,颜色,字体粗细

#     return img_bgr


# 四、Hough 直线检测 - 写 FPS 数值
def process_frame(img_bgr):
    # 记录该帧开始处理的时间
    start_time = time.time ()

    img_gray = cv2.cvtColor (img_bgr, cv2.COLOR_BGR2GRAY)  # BGR 转 灰度图
    edges = cv2.Canny (img_gray, 50, 150, apertureSize=3)  # Canny 直线检测
    lines = cv2.HoughLines (edges, 1, np.pi / 180, 150)  # 霍夫直线检测

    if lines is None:  # 如果检测出直线
        pass
    else:
        for line in lines:
            rho, theta = line[0]
            a = np.cos (theta)
            b = np.sin (theta)
            x0 = a * rho
            y0 = b * rho
            # x1 stores the rounded off value of (r * cos(theta) - 1000 * sin(theta))
            x1 = int (x0 + 1000 * (-b))
            # y1 stores the rounded off value of (r * sin(theta)+ 1000 * cos(theta))
            y1 = int (y0 + 1000 * (a))
            # x2 stores the rounded off value of (r * cos(theta)+ 1000 * sin(theta))
            x2 = int (x0 - 1000 * (-b))
            # y2 stores the rounded off value of (r * sin(theta)- 1000 * cos(theta))
            y2 = int (y0 - 1000 * (a))
            img_bgr = cv2.line (img_bgr, (x1, y1), (x2, y2), (0, 0, 255), 2)

    # 在画面上写 FPS 数值
    end_time = time.time ()
    FPS = 1 / (end_time - start_time)  # 计算每秒处理图像帧数FPS
    FPS_string = 'FPS {:.2f}'.format (FPS)  # 写在画面上的字符串
    img_bgr = cv2.putText (img_bgr, FPS_string, (25, 100), cv2.FONT_HERSHEY_SIMPLEX, 1.25, (255, 0, 255),
                           2)  # 在画面上写字:图片,字符串,左上角坐标,字体,字体大小,颜色,字体粗细

    return img_bgr


## 逐帧实时处理手机摄像头拍摄的画面-代码模板
while True:
    img_bgr = cap.read ()

    if img_bgr is None:
        continue

    img_bgr = process_frame (img_bgr)

    cvs.imshow (img_bgr)

相信一定有很多UU们对这句话感到很疑惑:from cvs import *  ,在这里我们统一说明一下,cvs是Aidlux自带的OpenCV视觉处理库,和传统的跑python的OpenCV库相同道理,只是换了一个名字而已,具体用法和传统的OpenCV用法相同,这个需要我们注意一下!!!
二、将本地写好的python文件上传至手机/home目录下
将登录网址的端口从8000换成38080就能进入到我们文件传输的页面
实例:我本机远程连接手机的网址为:AidLux OS

 

但如果我换成38080端口就进入到了文件传输界面:

紧接着,我们将本地编写的 逐帧拍摄和OpenCV结合.py  (大佬们不要喷我,刚接触计算机视觉,易于自己区分,不得不将文件名字改成中文便于自己区分 -_-  -_-  -_-)

 三、在终端上运行我们写好的python文件
启动命令为:python   逐帧拍摄和OpenCV结合.py

这个是手机上显示的画面:

四、利用Aidlux自带的launch-build应用,将我们写好的python代码成功创建成桌面应用
 打开launch-build应用显示如下,我这里将其应用名称设置为 远方上 ,图标自选,唯一标识设置为:yuanfangshang(这个也可以自己随便写,只要不和其他应用有冲突就行)启动命令为:python /home/逐帧拍摄和OpenCV结合.py  这样的绝对路径, 访问路径可以随便填,如:http://0.0.0.0:40478  点击提交就能在桌面上看到我们刚设置好的软件应用了,我们的任务也打工告成了!!!

 

相关运行视频如下:

 

调用手机摄像头实时显示画面

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值