1.硬件准备

摄像头、arduino单片机,连接线

(如图为双目摄像头)

(如图为单目摄像头)

摄像头和arduino连接上树莓派

2.软件准备

配置opencv、numpy库

具体配置方法可以看这篇博客:(经验帖)不易出错的树莓派配置opencv方法,解决“No module named ‘cv2‘“问题. 亲测有效_长弓同学的博客-CSDN博客

3.代码

双目摄像头代码

import cv2
import serial
import numpy as np
import time
def connection(str):ser = serial.Serial('/dev/ttyACM0', 115200, timeout=1)try:       while(True):send = strtime.sleep(1)ser.write(send.encode())print(send)str1 = send.readline().decode()except:ser.close()
def main():   cap = cv2.VideoCapture(0)lower_bule = np.array([100, 43, 46])upwer_bule = np.array([124, 255, 255])while(True):ret,frame=cap.read()frameHSV = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)mask = cv2.inRange(frameHSV, lower_bule, upwer_bule)median = cv2.medianBlur(mask, 5)res = cv2.bitwise_and(frame, frame, mask=median)erzhi = cv2.cvtColor(res, cv2.COLOR_BGR2GRAY)gs = cv2.GaussianBlur(erzhi, (5, 5), 0)_,contours, hierarchy = cv2.findContours(gs, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)cv2.drawContours(gs, contours, -1, (0, 255, 255), 2)area = []for i in range(len(contours)):area.append(cv2.contourArea(contours[i]))max_idx = np.argmax(area)for i in range(max_idx - 1):cv2.fillConvexPoly(gs, contours[max_idx - 1], 0)cv2.fillConvexPoly(gs, contours[max_idx], 255)moment = cv2.moments(contours[max_idx])if moment['m00'] != 0:cx = int(moment['m10'] / moment['m00'])cy = int(moment['m01'] / moment['m00'])cnt_centroid=cx, cycv2.circle(contours[max_idx],cnt_centroid,5,[255,0,255],-1)frame = cv2.resize(gs, (256, 256))#左画面大小frame_left = frame[:, 0:128]#右画面大小frame_right = frame[:, 128:257]#左画面的图像值left = np.sum(frame_left == 255)#右画面的图像值right = np.sum(frame_right == 255)full = np.sum(frame == 255)#print(full)#需要重测#print(left)#print(right)if (left < right & full>80):connection("L")print("left")else:connection("R")print("right")cv2.imshow('frame',gs)if cv2.waitKey(1)==ord('q'):break
if __name__ == '__main__':main()

单目摄像头代码:

import cv2
import numpy as np
area = 0
cap = cv2.VideoCapture(1)  # 打开摄像头
while True:ret, frame = cap.read()  # 读取摄像头#BGR转HSVframeHSV = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)#HSV中蓝色的范围lower_bule = np.array([100, 43, 46])upwer_bule = np.array([124, 255, 255])#图像处理去除蓝色以外的颜色mask = cv2.inRange(frameHSV, lower_bule, upwer_bule)#中值检测median = cv2.medianBlur(mask,5)res = cv2.bitwise_and(frame, frame, mask=mask)#canny边缘检测Canny = cv2.Canny(median,10,200)#二值化操作# ret , binary = cv2.threshold(mask,0,255,cv2.THRESH_BINARY)#膨胀操作#kelnel = np.ones((9,9),np.uint8)#dilaiton = cv2.dilate(binary,kelnel,iterations=1)#获取图像轮廓坐标contours, hierarchy = cv2.findContours(Canny,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)if len(contours) > 0:boxes = [cv2.boundingRect(cnt) for cnt in contours]for box in boxes:x,y,w,h =box#画框cv2.drawContours(frame,contours,-1,(0,0,255),3)#计算图像面积大小for i in contours:area+=cv2.contourArea(i)print(area)#图像显示cv2.imshow('frame',frame)cv2.imshow('median',median)cv2.imshow('Canny',Canny)#cv2.imshow('binary',binary)#cv2.imshow('kelnel',kelnel)cv2.imshow("mask",mask)cv2.imshow("res", res)if cv2.waitKey(1) & 0xFF == ord('q'):  # 按q退出breakcap.release()
cv2.destroyAllWindows()# 距离的判断根据色块的大小
# 判断色块位置图像侵占

4.运行结果如下

树莓派教程——树莓派连接并打开摄像头相关推荐

  1. 树莓派系统搭载arduino单片机 打开双目摄像头

    前言:树莓派系统搭载入门初试水教程+Python代码运行打开摄像头 (树莓派搭载arduino单片机+双目摄像头) 软件准备:Arduino IDE软件,树莓派桌面:1准备环境2Arduino IDE ...

  2. w7计算机摄像头怎么打开,如何打开摄像头,详细教您Win7摄像头怎么打开

    使用笔记本电脑的用户都晓得笔记本自带有摄像头功能,不像台式电脑需要连接摄像头,在笔记本win7系统中直接打开摄像头就可以使用,非常方便.不过有用户一般的情况下都没有去摸索,尝试很多方法还是失败,下面, ...

  3. usb一转多 树莓派zero_树莓派 Zero USB/以太网方式连接配置教程

    树莓派 Zero 之所以成为一款非常棒的单板计算机并不全因为它小巧的尺寸和便宜的价格,还得益于它便捷.易用的特性.在加装了 Zero Quick Plug 或 microUSB/USB 转换头之后,将 ...

  4. (二)树莓派系列教程:树莓派4B手动连接wifi,远程控制。命令行界面、桌面界面

    一.通过连接同一局域网的wifi来远程操作树莓派 在树莓派系列教程(一)中我们在烧录系统的时候已经配置了树莓派在开机时候按优先级来裂解wifi.但是如果我们没有配置wifi的文件,我们可以手动连接wi ...

  5. win10连接树莓派教程

    一.准备工作 树莓派3B+主板一个(系统已烧制完毕) win10电脑一台 网线一条 二.win10设置 1.将网线与树莓派连接 2.右击网络连接图标,选择打开"网络和Internet&quo ...

  6. 树莓派教程 - 2.2 树莓派CSI摄像头,raspivid、raspistill常用参数

    usb摄像头使用固然方便,可usb传输和编解码需要占用大量CPU,而树莓派的CPU并不强,解析高码率图像时占用巨大. CSI摄像头的编解码可以调用树莓派的GPU,能很大减轻CPU压力. 而且树莓派官方 ...

  7. 开源教程 | 树莓派 DIY 波士顿动力机器狗,立省 53 万 RMB

    国外小哥 Michael Romanko 利用树莓派3B,伺服电机,液晶显示器,锂电池,PCA9695控制板打造了一只波士顿动力机器狗,成本不到4000元. 通过三轴身体姿态控制,这样一只树莓派版波士 ...

  8. 树莓派python开发教程_树莓派教程(基于python编程)--入门篇

    原标题:树莓派教程(基于python编程)--入门篇 一:格式化SD卡 SD卡插入读卡器连接电脑,使用SDFormatter对SD卡进行格式化 (重装烧录也要进行着SD卡格式化操作) 二:下载官方镜像 ...

  9. 树莓派教程二-网络配置

    2019独角兽企业重金招聘Python工程师标准>>> 因为做毕设,寒假在折腾树莓派,搞得差不多,写了几篇文章,供大家学习,原文在爱板网,然后我转到果壳这里来乐:树莓派教程二-网络配 ...

最新文章

  1. javaweb添加拦截器
  2. localdatetime转化为date_为啥你用@JsonFormat注解时,LocalDateTime会反序列化失败?
  3. java内部类基础(静态内部类)
  4. 【Java数据结构与算法】第八章 快速排序、归并排序和基数排序
  5. 银行数据部门如何管理跟使用数据?来围观星球中老师的答案
  6. CS231n——编程作业环境配置
  7. 5. php 基本数据类型
  8. 玛咖新品牌 卡皇玛卡4月上市
  9. Leftist Heaps
  10. vue中views新建文件夹的代码规范
  11. 利用redis,模拟控制库存消耗场景
  12. NSDate中夏令时的坑你知道吗
  13. 服务器机柜型号大全,标准机柜尺寸表
  14. C语言中-含义,比如说 p=p-next
  15. 【算法详解】splay的初步了解
  16. java丐帮_JAVA集合 list set map
  17. 个体值0和31差多少攻击_口袋妖怪:攻略篇!个体值有多重要?6V宝可梦才是完美的精灵!...
  18. IC芯片设计项目管理003:检查清单checklist的应用
  19. 银行本、异地,本、跨行存取款手续费大全
  20. 第四章 数字逻辑电路设计方法【Verilog】

热门文章

  1. 阿里云 (ECS 部署Javaweb 以及虚拟机操作)
  2. 微信小程序canvas画价格走势图(六)
  3. Android手机步数怎么统计的,手机中运动步数是如何计算的?(15个回答)
  4. [redis]知识回顾之redis主从+哨兵搭建简要记录
  5. 通用人工智能最新突破!一个Transformer搞定一切
  6. Enovia文件协作服务器安装,NX与Enovia集成安装配置手册_jimmy.docx
  7. SDIO_WiFi驱动学习之安卓WLAN架构介绍及调用流程分析
  8. Vue中watch监听路由的使用场景
  9. 常见的网络协议有哪些?
  10. PartⅠIn the Hotel 在宾馆!?