学习目标:
文章目录
一、第一课:硬件组装,镜像文件烧录,开机
- 硬件安装
- SD卡格式化(第二次要格式化,然后分区)
- 镜像烧录
- 软件更新,sudo apt-get update; sudo apt-get full-upgrade
- 如何设置,可以避免输入密码
二、第二课:基本Linux指令学习(1)
1.打开Terminal
1. Ctrl+Alt+T
2. 屏幕右键
2.Linux 文件操作指令
1. ls 显示当前目录下的文件,其中蓝色是文件夹
2. cd Music 进入某目录
3. cd ..返回上层目录
4. cd / 是跳转到根目录,根目录是所有用户共享的目录
5. cd ~ 是跳转到当前用户的家目录.如果是root用户,cd ~ 相当于 cd /root.如果是普通用户,cd ~ 相当于cd /home/当前用户名
6. cd /home/nano 到当前登录用户下
7. clear 清除Terminal
8. sudo apt-get install ****安装app
9. sudo apt-get remove ****删除app
10. pwd 显示当前工作目录
11. mkdir scratch 创建文件夹
12. nano MyDogs.txt 创建文件
13. cat MyDogs.txt打开文件
14. Ctrl + C/D 是强制中断程序的执行,进程已经终止
15. python3 greeting.py
16. mv cats.py Cats.py 移动 mv cats.py ../Music/Cats.py
17. cp Cats.py AAA.py 复制
18. rm ~/Music/Cats.py 删除文件
19. rmdir ***删除文件夹
20. mv *.txt ../textFiles 移动某一类文件
三、第三课:Linux指令学习(2)
1.Linux 操作指令
链接: Linux命令大全.
1. ls >myDir.txt 把当前文件名写入新文件
2. ls >>myDir.txt
3. sort scratch/myCars.txt 按字母先后顺序排列显示,并不改变原文件(-M, -r, -n)
4. find ~ -name "fever.txt"
5. grep -i audi myCars.txt
6. 查看操作系统版cat /proc/version
7. 查看主板版本 cat /proc/cpuinfo
8. 查看SD存储卡剩余空间 df -h
9. 查看ip地址 ifconfig
10. 压缩:tar –zcvf filename.tar.gz dirname
11. 解压:tar –zxvf filename.tar.gz
12. sudo apt-get install xxx 安装软件
13. sudo apt-get update 更新软件列表
14. sudo apt-get upgrade 更新已安装软件
15. sudo apt-get remove xxx 删除软件
四、第四课:远程登录及几个用到的软件
- 无线网卡 IP地址:172.20.152.141
- 远程登录:PuTTY、SecureCRT、VncViewer(相当于向日葵,会比较卡)
- 交换文件:WinSCP
- 安装Jupyter Lab: pip install jupyterlab
- jupyter-lab指令浏览器自动打开Jupyter Lab
- 链接: Jupyter Lab介绍.
五、第五课:
1.Python学习
Python语法和Matlab语法差不多
1.nano pythonPrint.py
2.Ctrl+D
3.Python3 pythonPrint.py
4.Print()
5.Input()
6.IF
7.For
8.Import numpy as np
六、第六课:Python IDE
1.安装Code-OSS(VSCode)
- sudo apt-get install curl
- 下载Code-OSS
- curl -L https://github.com/toolboc/vscode/releases/download/1.32.3/code-oss_1.32.3-arm64.deb -o code-oss_1.32.3-arm64.deb
- sudo dpkg -i code-oss_1.32.3-arm64.deb 安装完毕,在程序搜索code可以看到
- 或者在终端输入code-oss打开OSS
- 在settings-》appearance-》behavior中设置工具栏
- 安装python extension
- Ctrl+shift+P搜索select interpreter,选择Python 3.6.9-64bit
- 在file-》Preferences中可以设置主题,字体等信息
- 新建文件夹,py文件,编程调试
七、第七课:Matplotlib/Pyplot/Numpy
– 处理数据的工具,类似matlab的数学函数和绘图函数
安装工具
- sudo apt-get install python3-matplotlib
- 测试安装:python3->import matplotlib.pyplot as plt->import numpy as np->np.version(两个下划线)
测试工具
- 在OSS中测试,
- import numpy as np
八、第八课:OpenCV
安装OpenCV
如何获得最新OpenCV版本,先安装,然后remove,然后在import CV2
- sudo apt-get install python3-opencv
- python3-> import cv2->cv2.version
- sudo apt-get remove python3-opencv
- python3-> import cv2->cv2.version 重复一遍,得到最新版本opencv
测试OpenCV
九、第九课:调用摄像头
1、摄像头调用
注意camSet中的设置,尤其是framerate
import cv2
print(cv2.__version__)
dispW=320
dispH=240
flip=2
camSet='nvarguscamerasrc ! video/x-raw(memory:NVMM), width=3264, height=2464, format=NV12, framerate=15/1 ! nvvidconv flip-method='+str(flip)+' ! video/x-raw, width='+str(dispW)+', height='+str(dispH)+', format=BGRx ! videoconvert ! video/x-raw, format=BGR ! appsink'
cam=cv2.VideoCapture(camSet)
while True:
ret,frame=cam.read()
cv2.imshow('piCam',frame)
if cv2.waitKey(1)==ord('q'):
break
cam.release()
cv2.destroyAllWindows()
安装libcanberra-gtk-module
sudo apt-get install libcanberra-gtk-module
切换摄像头WebCam,这里假设WebCam的地址是1
cam=cv2.VideoCapture(1)
2、OpenCV基本编程
- 多图像窗口
- 窗口移动
- 彩色转黑白图像
- 窗口大小 graysmall=cv2.resize(gray,(320,240))
- 读写Video
- 如何在图像上画圆、直线、矩形、写字、带箭头直线
(1)打开图像
import cv2
print(cv2.__version__)
dispW=320*1
dispH=240*1
flip=2
camSet='nvarguscamerasrc ! video/x-raw(memory:NVMM), width=3264, height=2464, format=NV12, framerate=21/1 ! nvvidconv flip-method='+str(flip)+' ! video/x-raw, width='+str(dispW)+', height='+str(dispH)+', format=BGRx ! videoconvert ! video/x-raw, format=BGR ! appsink'
cam=cv2.VideoCapture(camSet)
while True:
ret,frame=cam.read()
cv2.imshow('piCam',frame)
if cv2.waitKey(1)==ord('q'):
break
cam.release()
cv2.destroyAllWindows()
(2)openCV2-moveWindow
import cv2
print(cv2.__version__)
dispW=320*1
dispH=240*1
flip=2
camSet='nvarguscamerasrc ! video/x-raw(memory:NVMM), width=3264, height=2464, format=NV12, framerate=21/1 ! nvvidconv flip-method='+str(flip)+' ! video/x-raw, width='+str(dispW)+', height='+str(dispH)+', format=BGRx ! videoconvert ! video/x-raw, format=BGR ! appsink'
cam=cv2.VideoCapture(camSet)
while True:
ret,frame=cam.read()
cv2.imshow('nanoCam',frame)
cv2.moveWindow('nanoCam',0,0)
cv2.imshow('nanoCam2',frame)
cv2.moveWindow('nanoCam2',300,0)
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
cv2.imshow('nanoCamGrey',gray)
cv2.moveWindow('nanoCamGrey',0,400)
cv2.imshow('nanoCamGrey2',gray)
cv2.moveWindow('nanoCamGrey2',300,400)
if cv2.waitKey(1)==ord('q'):
break
cam.release()
cv2.destroyAllWindows()
(3)openCV3-resizeWindow
import cv2
print(cv2.__version__)
dispW=320*1
dispH=240*1
flip=2
camSet='nvarguscamerasrc ! video/x-raw(memory:NVMM), width=3264, height=2464, format=NV12, framerate=21/1 ! nvvidconv flip-method='+str(flip)+' ! video/x-raw, width='+str(dispW)+', height='+str(dispH)+', format=BGRx ! videoconvert ! video/x-raw, format=BGR ! appsink'
cam=cv2.VideoCapture(camSet)
while True:
ret,frame=cam.read()
cv2.imshow('piCam',frame)
frameBig=cv2.resize(frame,(640,480))
cv2.imshow('piCamBig',frameBig)
cv2.moveWindow('piCamBig',0,400)
if cv2.waitKey(1)==ord('q'):
break
cam.release()
cv2.destroyAllWindows()
(4)openCV4-drawing
import cv2
print(cv2.__version__)
dispW=320*2
dispH=240*2
flip=2
camSet='nvarguscamerasrc ! video/x-raw(memory:NVMM), width=3264, height=2464, format=NV12, framerate=21/1 ! nvvidconv flip-method='+str(flip)+' ! video/x-raw, width='+str(dispW)+', height='+str(dispH)+', format=BGRx ! videoconvert ! video/x-raw, format=BGR ! appsink'
cam=cv2.VideoCapture(camSet)
while True:
ret,frame=cam.read()
frame = cv2.rectangle(frame,(140,100),(220,140),(0,255,0),4)
frame = cv2.circle(frame,(340,100),80,(0,255,255),4)
fnt = cv2.FONT_HERSHEY_DUPLEX
frame=cv2.putText(frame,'My First Text',(100,100),fnt,1,(25,0,123),2)
frame=cv2.line(frame,(10,10),(630,470),(0,0,0,),2)
frame=cv2.arrowedLine(frame,(10,470),(630,10),(255,0,0),1)
cv2.imshow('piCam',frame)
if cv2.waitKey(1)==ord('q'):
break
cam.release()
cv2.destroyAllWindows()
(5)saveRead
import cv2
print(cv2.__version__)
dispW=320*1
dispH=240*1
flip=2
camSet='nvarguscamerasrc ! video/x-raw(memory:NVMM), width=3264, height=2464, format=NV12, framerate=21/1 ! nvvidconv flip-method='+str(flip)+' ! video/x-raw, width='+str(dispW)+', height='+str(dispH)+', format=BGRx ! videoconvert ! video/x-raw, format=BGR ! appsink'
#cam=cv2.VideoCapture(camSet)
#outVid=cv2.VideoWriter('videos/myCam.avi',cv2.VideoWriter_fourcc(*'XVID'),21,(dispW,dispH))
cam=cv2.VideoCapture('videos/myCam.avi')
while True:
ret,frame=cam.read()
cv2.imshow('piCam',frame)
#outVid.write(frame)
if cv2.waitKey(1)==ord('q'):
break
cam.release()
cv2.destroyAllWindows()
(6)图片显示移动框
import cv2
print(cv2.__version__)
dispW=320*2
dispH=240*2
flip=2
camSet='nvarguscamerasrc ! video/x-raw(memory:NVMM), width=3264, height=2464, format=NV12, framerate=21/1 ! nvvidconv flip-method='+str(flip)+' ! video/x-raw, width='+str(dispW)+', height='+str(dispH)+', format=BGRx ! videoconvert ! video/x-raw, format=BGR ! appsink'
cam=cv2.VideoCapture(camSet)
dispW=int(cam.get(cv2.CAP_PROP_FRAME_WIDTH))
dispH=int(cam.get(cv2.CAP_PROP_FRAME_HEIGHT))
BW=int(0.15*dispW)
BH=int(0.25*dispH)
posX=10
posY=270
dx=2
dy=2
while True:
ret,frame=cam.read()
cv2.moveWindow('piCam',0,0)
frame=cv2.rectangle(frame,(posX,posY),(posX+BW,posY+BH),(255,0,0),3)
cv2.imshow('piCam',frame)
posX=posX+dx
posY=posY+dy
if posX<=0 or (posX+BW)>dispW:
dx=dx*(-1)
if posY<=0 or (posY+BH)>dispH:
dy=dy*(-1)
if cv2.waitKey(1)==ord('q'):
break
cam.release()
cv2.destroyAllWindows()
(7)鼠标操作
import cv2
import numpy as np
print(cv2.__version__)
evt=-1
coord = []
img=np.zeros((250,250,3),np.uint8)
def click(event,x,y,flags,params):
global pnt
global evt
if event==cv2.EVENT_LBUTTONDOWN:
print('Mouse Event was:',event)
print(x,',',y)
pnt=(x,y)
evt=event
coord.append(pnt)
print(coord)
if event==cv2.EVENT_RBUTTONDOWN:
print(x,y)
blue=frame[y,x,0]
green=frame[y,x,1]
red=frame[y,x,2]
colorString=str(blue)+','+str(green)+','+str(red)
img[:]=[blue,green,red]
fnt=cv2.FONT_HERSHEY_PLAIN
r=255-int(red)
g=255-int(green)
b=255-int(blue)
tp=(b,g,r)
cv2.putText(img,colorString,(10,25),fnt,1.5,tp,2)
cv2.imshow('myColor',img)
dispW=320*2
dispH=240*2
flip=2
cv2.namedWindow('piCam')
cv2.setMouseCallback('piCam',click)
camSet='nvarguscamerasrc ! video/x-raw(memory:NVMM), width=3264, height=2464, format=NV12, framerate=21/1 ! nvvidconv flip-method='+str(flip)+' ! video/x-raw, width='+str(dispW)+', height='+str(dispH)+', format=BGRx ! videoconvert ! video/x-raw, format=BGR ! appsink'
cam=cv2.VideoCapture(camSet)
while True:
ret,frame=cam.read()
# if evt==1:
# cv2.circle(frame,pnt,5,(0,0,255),-1)
# font=cv2.FONT_HERSHEY_PLAIN
# myStr=str(pnt)
# cv2.putText(frame,myStr,pnt,font,1.5,(255,0,0),2)
for pnts in coord:
cv2.circle(frame,pnts,5,(0,0,255),-1)
font=cv2.FONT_HERSHEY_PLAIN
myStr=str(pnts)
cv2.putText(frame,myStr,pnts,font,1.5,(255,0,0),2)
cv2.imshow('piCam',frame)
cv2.moveWindow('piCam',0,0)
keyEvent= cv2.waitKey(1)
if keyEvent==ord('q'):
break
if keyEvent==ord('c'):
coord=[]
cam.release()
cv2.destroyAllWindows()
(8) 参数条
import cv2
print(cv2.__version__)
dispW=320*2
dispH=240*2
flip=2
def nothing(x):
pass
camSet='nvarguscamerasrc ! video/x-raw(memory:NVMM), width=3264, height=2464, format=NV12, framerate=21/1 ! nvvidconv flip-method='+str(flip)+' ! video/x-raw, width='+str(dispW)+', height='+str(dispH)+', format=BGRx ! videoconvert ! video/x-raw, format=BGR ! appsink'
cam=cv2.VideoCapture(camSet)
cv2.namedWindow('piCam')
cv2.createTrackbar('xVal','piCam',25,dispW,nothing)
cv2.createTrackbar('yVal','piCam',25,dispH,nothing)
while True:
ret,frame=cam.read()
xVal=cv2.getTrackbarPos('xVal','piCam')
yVal=cv2.getTrackbarPos('yVal','piCam')
cv2.circle(frame,(xVal,yVal),10,(255,0,0),-1)
cv2.imshow('piCam',frame)
cv2.moveWindow('piCam',0,0)
if cv2.waitKey(1)==ord('q'):
break
cam.release()
cv2.destroyAllWindows()
(9)通过滑动条画矩形
import cv2
print(cv2.__version__)
dispW=320*2
dispH=240*2
flip=2
def nothing(x):
pass
camSet='nvarguscamerasrc ! video/x-raw(memory:NVMM), width=3264, height=2464, format=NV12, framerate=21/1 ! nvvidconv flip-method='+str(flip)+' ! video/x-raw, width='+str(dispW)+', height='+str(dispH)+', format=BGRx ! videoconvert ! video/x-raw, format=BGR ! appsink'
cam=cv2.VideoCapture(camSet)
cv2.namedWindow('piCam')
cv2.createTrackbar('xVal','piCam',25,dispW,nothing)
cv2.createTrackbar('yVal','piCam',25,dispH,nothing)
while True:
ret,frame=cam.read()
xVal=cv2.getTrackbarPos('xVal','piCam')
yVal=cv2.getTrackbarPos('yVal','piCam')
cv2.circle(frame,(xVal,yVal),10,(255,0,0),-1)
cv2.imshow('piCam',frame)
cv2.moveWindow('piCam',0,0)
if cv2.waitKey(1)==ord('q'):
break
cam.release()
cv2.destroyAllWindows()
十、第十课:ROI(Region of Interest)in OpenCV
(1) 一个小例子 roi=frame[50:250,200:400].copy()
frame是YX,moveWindow是XY
import cv2
print(cv2.__version__)
dispW=320*2
dispH=240*2
flip=2
camSet='nvarguscamerasrc ! video/x-raw(memory:NVMM), width=3264, height=2464, format=NV12, framerate=21/1 ! nvvidconv flip-method='+str(flip)+' ! video/x-raw, width='+str(dispW)+', height='+str(dispH)+', format=BGRx ! videoconvert ! video/x-raw, format=BGR ! appsink'
cam=cv2.VideoCapture(camSet)
while True:
ret,frame=cam.read()
roi=frame[50:250,200:400].copy()
roiGray=cv2.cvtColor(roi,cv2.COLOR_BGR2GRAY)
roiGray=cv2.cvtColor(roiGray,cv2.COLOR_GRAY2BGR)
frame[50:250,200:400]=roiGray
cv2.imshow('ROI',roi)
cv2.moveWindow('ROI',0,600)
cv2.imshow('GRAY',roiGray)
cv2.moveWindow('GRAY',320,600)
cv2.imshow('piCam',frame)
cv2.moveWindow('piCam',0,0)
if cv2.waitKey(1)==ord('q'):
break
cam.release()
cv2.destroyAllWindows()
(2) 跳动窗口,窗口内彩色,其余黑白
import cv2
print(cv2.__version__)
dispW=320*2
dispH=240*2
flip=2
camSet='nvarguscamerasrc ! video/x-raw(memory:NVMM), width=3264, height=2464, format=NV12, framerate=21/1 ! nvvidconv flip-method='+str(flip)+' ! video/x-raw, width='+str(dispW)+', height='+str(dispH)+', format=BGRx ! videoconvert ! video/x-raw, format=BGR ! appsink'
cam=cv2.VideoCapture(camSet)
BW=int(0.2*dispW)
BH=int(0.2*dispH)
posX=10
posY=270
dx=2
dy=2
while True:
ret,frame=cam.read()
roi=frame[posY:posY+BH,posX:posX+BW].copy()
frame=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
frame=cv2.cvtColor(frame,cv2.COLOR_GRAY2BGR)
frame[posY:posY+BH,posX:posX+BW]=roi
frame=cv2.rectangle(frame,(posX,posY),(posX+BW,posY+BH),(255,0,0),3)
posX=posX+dx
posY=posY+dy
cv2.imshow('piCam',frame)
cv2.moveWindow('piCam',0,0)
if posX<=0 or (posX+BW)>dispW:
dx=dx*(-1)
if posY<=0 or (posY+BH)>dispH:
dy=dy*(-1)
if cv2.waitKey(1)==ord('q'):
break
cam.release()
cv2.destroyAllWindows()
(3)鼠标框选
import cv2
print(cv2.__version__)
goFlag=0
def mouse_click(event,x,y,flags,params):
global x1,y1,x2,y2
global goFlag
if event==cv2.EVENT_LBUTTONDOWN:
x1=x
y1=y
glFlag=0
if event==cv2.EVENT_LBUTTONUP:
x2=x
y2=y
goFlag=1
cv2.namedWindow('piCam')
cv2.setMouseCallback('piCam',mouse_click)
dispW=320*2
dispH=240*2
flip=2
camSet='nvarguscamerasrc ! video/x-raw(memory:NVMM), width=3264, height=2464, format=NV12, framerate=21/1 ! nvvidconv flip-method='+str(flip)+' ! video/x-raw, width='+str(dispW)+', height='+str(dispH)+', format=BGRx ! videoconvert ! video/x-raw, format=BGR ! appsink'
cam=cv2.VideoCapture(camSet)
while True:
ret,frame=cam.read()
if goFlag==1:
frame=cv2.rectangle(frame,(x1,y1),(x2,y2),(255,0,0,),3)
roi=frame[y1:y2,x1:x2]
cv2.imshow('Copy ROI',roi)
cv2.moveWindow('Copy ROI',705,0)
cv2.imshow('piCam',frame)
cv2.moveWindow('piCam',0,0)
if cv2.waitKey(1)==ord('q'):
break
cam.release()
cv2.destroyAllWindows()