我是靠谱客的博主 殷勤信封,这篇文章主要介绍树莓派系统搭载arduino单片机 打开双目摄像头,现在分享给大家,希望可以做个参考。

前言:树莓派系统搭载入门初试水教程+Python代码运行打开摄像头 (树莓派搭载arduino单片机+双目摄像头)

软件准备:Arduino IDE软件,树莓派桌面:1准备环境2Arduino IDE3打开摄像头

硬件准备:树莓派,Arduin单片机,双目摄像头

1.软件准备
下载Arduino IDE软件
Windows用户可在浏览器输入网址:https://www.arduino.cc/en/Main/Software

 下载安装都是傻瓜式操作,点击下一步即可,直至安装成功。


2.硬件准备
树莓派、Arduin单片机与双目摄像头


3.树莓派桌面
3.1准备环境确保换源、安装Opencv、确保验证无误(确认安装成功过程遗忘的同学,请扫描页面下面的二维码或者点击链接查看)

3.2 Arduino IDE打开Arduino IDE,将Arduino单片机连接到电脑USB接口。参考文章最下方的串口通信参考代码(adruino_串口通信.txt)复制到IDE,然后检查是否连接到Arduino单片机的端口(Arduino Uno)

adruino_串口通信

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <Servo.h> Servo steeringServo; Servo powerServo; int incomdate = 0; void setup() { pinMode(9,OUTPUT); pinMode(5,OUTPUT); Serial.begin(115200); steeringServo.attach(9); powerServo.attach(5); steeringServo.writeMicroseconds(1500); powerServo.writeMicroseconds(1400); delay(1000); powerServo.writeMicroseconds(1500); } void loop() { steeringServo.writeMicroseconds(1500); delay(5000); powerServo.writeMicroseconds(1500); delay(5000); while(Serial.available()>0){ incomdate = Serial.read(); if(incomdate == '1'){ steeringServo.writeMicroseconds(2000); Serial.println("ok"); } delay(5); } }

tools接口选择: 

 

 

 成功图示如下

3.3打开摄像头
将Arduino单片机接口拔下连接到树莓派,双目摄像头接口也连接到树莓派。
在树莓派桌面新建Python文件(任意文件名+“.py”),右键单击打开方式:
编程Thonny Python IDE,可用(raspbery.串口通信.txt)代码验证此文件是否可用

raspbery.串口通信:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import serial ser = serial.Serial('/dev/ttyACM0',115200,timeout=1) while True: send = '1' ser.write(send.encode()) str1 =ser.readline().decode() if(str1!=""): print(str1) if(str1 == 'okrn'): print('1m get') break ser.close()

4.找寻Arduino单片机的端口
在终端输入:Is/dev/tty*,然后从树莓派上取下Arduino单片机连接线,再次输入:Is
/dev/tty*,前后对比,缺少的那个端口名称即我们需要的端口名称例如:参考代码(CAR.txt)中“ttyACM0”这个是我的端口名称。

 单目摄像头参考代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import cv2 import numpy as np area = 0 cap = cv2.VideoCapture(0) # 打开摄像头 while True: ret, frame = cap.read() # 读取摄像头 #BGR转HSV frameHSV = 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退出 break cap.release() cv2.destroyAllWindows() # 距离的判断根据色块的大小 # 判断色块位置图像侵占

双目参考代码CAR:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import cv2 import numpy as np import serial #树莓派与aduino串口通信 def connection(str): ser = serial.Serial('/dev/ttyACM0', 115200, timeout=1) while True: send = str ser.write(send.encode()) str1 = ser.readline().decode() if (str1 != ""): print(str1) if (str1 == 'okrn'): print('1m get') break ser.close() #颜色的设定 def colorset(frame): lower_bule = np.array([100, 43, 46]) upwer_bule = np.array([124, 255, 255]) #BGR颜色转换为HSV 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) return res #转向的设定 def Setting(): frame = cv2.imread('1.png', cv2.IMREAD_GRAYSCALE) # 路径 frame = cv2.resize(frame, (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("!s2000") print("left") else: #connection("!s1000") print("right") #最大连接区域的中点坐标 def centroid(max_contour): moment = cv2.moments(max_contour) if moment['m00'] != 0: cx = int(moment['m10'] / moment['m00']) cy = int(moment['m01'] / moment['m00']) return cx, cy else: return None def main(): cap = cv2.VideoCapture(1) while True: ret,frame = cap.read() frame = colorset(frame) cv2.imshow("Color_set",frame) #转换为灰度值 #灰度 frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) #高斯滤波 frame = cv2.GaussianBlur(frame, (5, 5), 0) #二值化 ret, frame = cv2.threshold(frame, 50, 255, cv2.THRESH_BINARY) #轮廓检测 contours, hierarchy = cv2.findContours(frame, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) print("number of contours:%d" % len(contours)) cv2.drawContours(frame, 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(frame, contours[max_idx - 1], 0) cv2.fillConvexPoly(frame, contours[max_idx], 255) #求最大连通域的中心坐标 cnt_centroid = centroid(contours[max_idx]) cv2.circle(contours[max_idx],cnt_centroid,5,[255,0,255],-1) print("Centroid : " + str(cnt_centroid)) #显示窗口 cv2.imshow("contours", frame) cv2.imwrite("1.png", frame) Setting() if cv2.waitKey(1) & 0xFF == ord('q'): # 按q退出 break if __name__ == '__main__': main()

将控制摄像头的代码(CAR.txt)写入.py文件最后运行代码,出现如下界面即打开成功。


 

最后

以上就是殷勤信封最近收集整理的关于树莓派系统搭载arduino单片机 打开双目摄像头的全部内容,更多相关树莓派系统搭载arduino单片机内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(105)

评论列表共有 0 条评论

立即
投稿
返回
顶部