# Preliminary understanding OpenCV
在第四天的学习内容中,我们将了解OpenCV的基本使用方法,并结合Picamera模块,使用树莓派3B实时显示树莓派所拍摄的图像。
更多内容请关注我的GitHub库:https://github.com/TonyStark1997,如果喜欢,star并follow我!
***
## Step 0:准本材料 & 环境介绍
***
材料:Raspberry Pi 3B、Camera V2、5V电源线和插头、Wi-Fi
环境:OpenCV3.4.1、Python3.5.3、picamera、numpy、matplotlib
## Step 1:打开树莓派摄像头功能
***
首先需要在树莓派设置页面中打开摄像头功能。
>点击左上角树莓派标志 > Preferences > Raspberry Pi Configuration
![image1](https://raw.githubusercontent.com/TonyStark1997/OpenCV-Raspberry_Pi/master/Day_4/Image/image1.png)
打开树莓派设置页面后选择interfaces页面,将Camera功能设置为Enabled,即打开了摄像头功能。
![image2](https://raw.githubusercontent.com/TonyStark1997/OpenCV-Raspberry_Pi/master/Day_4/Image/image2.png)
## Step 2:安装所需模块
***
在本篇的学习内容中,我们不仅需要已经搭建好的OpenCV3.4.1和Python3.5.3环境,还需要在Python编写的代码中使用numpy、picamera和matplotlib模块,所以我们先使用pip安装这三个模块:
```bash
~ $ sudo pip3 install numpy picamera matplotlib
```
## Step 3:几个使用OpenCV的基本例子
***
OpenCV的Python使用方法请自行到[OpenCV官网](https://docs.opencv.org/3.4.1/d6/d00/tutorial_py_root.html)的学习教程页面进行学习,也可以阅读我的在GitHub中发表的[OpenCV Python Tutorial中文翻译](https://github.com/TonyStark1997/OpenCV-Python)文章进行学习,我的教程翻译文章将持续在GitHub仓库和我的[CSDN博客](https://me.csdn.net/qq_40179738)上更新。进入跳转页面请直接点击前面一句话的关键字超链接。
接下来,我们在树莓派中建立几个Python程序,简单了解以下OpenCV的基本使用方法
### demo1
在第一个程序中,我们学习如何使用OpenCV加载并显示一副图片:
```python
import numpy as np
import cv2 as cv
img = cv.imread('opencv_logo.jpg',0)
cv.imshow('image',img)
k = cv.waitKey(0)
if k == 27: # wait for ESC key to exit
cv.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save and exit
cv.imwrite('opencv.png',img)
cv.destroyAllWindows()
```
在程序所在目录中有一张名为‘opencv_logo’的jpg格式图片,具体是什么图片读者可以自己定义,只要准确知道图片的名字和格式即可。在以上的程序中,我们使用OpenCV加载并显示了opencv_logo.jpg,并可以通过键盘按键“Esc”和“s”选择关闭显示窗口或者在程序所在目录将图片另存为opencv.png文件。
![image3](https://raw.githubusercontent.com/TonyStark1997/OpenCV-Raspberry_Pi/master/Day_4/Image/image3.png)
### demo2
在第二个程序中,我们学习如何使用OpenCV绘制图形:
```python
import numpy as np
import cv2 as cv
# Create a black image
img = np.zeros((512,512,3), np.uint8)
# Draw a diagonal blue line with thickness of 5 px
cv.line(img,(0,0),(511,511),(255,0,0),5)
cv.rectangle(img,(384,0),(510,128),(0,255,0),3)
cv.circle(img,(447,63), 63, (0,0,255), -1)
cv.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
cv.polylines(img,[pts],True,(0,255,255))
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA)
winname = 'example'
cv.namedWindow(winname)
while(1):
cv.imshow(winname, img)
if cv.waitKey(1) & 0xFF == ord('q'):
break
cv.destroyWindow(winname)
```
上面这段程序在一个窗口内分别绘制了一条直线、一个矩形、一个圆、半个椭圆、一个不规则四边形和添加了“OpenCV”一段文字。并可以通过键盘按键“q”退出并关闭窗口。
![image4](https://raw.githubusercontent.com/TonyStark1997/OpenCV-Raspberry_Pi/master/Day_4/Image/image4.png)
### demo3
在第三个程序中,我们学习如何使用OpenCV鼠标事件在双击的地方画出一个蓝色的圆,并通过键盘按键“Esc”退出并关闭窗口:
```python
import numpy as np
import cv2 as cv
# mouse callback function
def draw_circle(event,x,y,flags,param):
if event == cv.EVENT_LBUTTONDBLCLK:
cv.circle(img,(x,y),100,(255,0,0),-1)
# Create a black image, a window and bind the function to window
img = np.zeros((512,512,3), np.uint8)
cv.namedWindow('image')
cv.setMouseCallback('image',draw_circle)
while(1):
cv.imshow('image',img)
if cv.waitKey(20) & 0xFF == 27:
break
cv.destroyAllWindows()
```
![image5](https://raw.githubusercontent.com/TonyStark1997/OpenCV-Raspberry_Pi/master/Day_4/Image/image5.png)
### demo4
在第四个程序中,我们学习如何使用OpenCV的鼠标和键盘事件绘制矩形和圆形两种不同的图案:
```python
import numpy as np
import cv2 as cv
drawing = False # true if mouse is pressed
mode = True # if True, draw rectangle. Press 'm' to toggle to curve
ix,iy = -1,-1
# mouse callback function
def draw_circle(event,x,y,flags,param):
global ix,iy,drawing,mode
if event == cv.EVENT_LBUTTONDOWN:
drawing = True
ix,iy = x,y
elif event == cv.EVENT_MOUSEMOVE:
if drawing == True:
if mode == True:
cv.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
else:
cv.circle(img,(x,y),5,(0,0,255),-1)
elif event == cv.EVENT_LBUTTONUP:
drawing = False
if mode == True:
cv.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
else:
cv.circle(img,(x,y),5,(0,0,255),-1)
img = np.zeros((512,512,3), np.uint8)
cv.namedWindow('image')
cv.setMouseCallback('image',draw_circle)
while(1):
cv.imshow('image',img)
k = cv.waitKey(1) & 0xFF
if k == ord('m'):
mode = not mode
elif k == 27:
break
cv.destroyAllWindows()
```
![image6](https://raw.githubusercontent.com/TonyStark1997/OpenCV-Raspberry_Pi/master/Day_4/Image/image6.png)
### demo5
在第五个程序中,我们学习如何使用OpenCV建立一个使用轨迹栏调色的调色板:
```python
import numpy as np
import cv2 as cv
def nothing(x):
pass
# Create a black image, a window
img = np.zeros((300,512,3), np.uint8)
cv.namedWindow('image')
# create trackbars for color change
cv.createTrackbar('R','image',0,255,nothing)
cv.createTrackbar('G','image',0,255,nothing)
cv.createTrackbar('B','image',0,255,nothing)
# create switch for ON/OFF functionality
switch = '0 : OFF \n1 : ON'
cv.createTrackbar(switch, 'image',0,1,nothing)
while(1):
cv.imshow('image',img)
k = cv.waitKey(1) & 0xFF
if k == 27:
break
# get current positions of four trackbars
r = cv.getTrackbarPos('R','image')
g = cv.getTrackbarPos('G','image')
b = cv.getTrackbarPos('B','image')
s = cv.getTrackbarPos(switch,'image')
if s == 0:
img[:] = 0
else:
img[:] = [b,g,r]
if cv.waitKey(1) & 0xFF == ord('q'):
break
cv.destroyAllWindows()
```
![image7](https://raw.githubusercontent.com/TonyStark1997/OpenCV-Raspberry_Pi/master/Day_4/Image/image7.png)
### demo6
在第六个程序中,我们学习如何使用OpenCV和matplotlib建立五种图片边框:
```python
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
BLUE = [255,0,0]
img1 = cv.imread('opencv-logo.png')
replicate = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REPLICATE)
reflect = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REFLECT)
reflect101 = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REFLECT_101)
wrap = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_WRAP)
constant= cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_CONSTANT,value=BLUE)
plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')
plt.show()
```
![image8](https://raw.githubusercontent.com/To
没有合适的资源?快使用搜索试试~ 我知道了~
在树莓派上用Python实现OpenCV图像处理.zip
共55个文件
png:40个
py:7个
md:5个
0 下载量 18 浏览量
2024-04-15
01:48:24
上传
评论
收藏 25.76MB ZIP 举报
温馨提示
【项目资源】:图像处理。包含前端、后端、移动开发、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源等各种技术项目的源码。包括C++、Java、python、web、C#、EDA等项目的源码。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。
资源推荐
资源详情
资源评论
收起资源包目录
Learning notes for implementing OpenCV image processing in Python on the Raspberry Pi #在树莓派上用Python实现OpenCV图像处理的学习笔记.zip (55个子文件)
newPic
Day_5
Image
屏幕快照 2019-04-11 下午10.58.11.png 349KB
屏幕快照 2019-04-11 下午11.43.17.png 443KB
屏幕快照 2019-04-11 下午10.52.12.png 548KB
屏幕快照 2019-04-11 下午11.43.01.png 586KB
屏幕快照 2019-04-11 下午11.43.10.png 129KB
屏幕快照 2019-04-11 下午11.43.30.png 373KB
屏幕快照 2019-04-11 下午11.42.53.png 69KB
屏幕快照 2019-04-11 下午11.43.24.png 412KB
屏幕快照 2019-04-11 下午11.43.38.png 365KB
屏幕快照 2019-04-11 下午11.42.46.png 178KB
README.md 11B
Day_2
Image
image2.png 553KB
image1.png 165KB
image3.png 542KB
README.md 5KB
Day_3
Image
image2.png 1.3MB
image8.png 1.61MB
image9.png 184KB
image1.png 247KB
image3.png 1.44MB
image7.png 741KB
image5.png 1.28MB
image4.png 1.29MB
image6.png 1.49MB
README.md 8KB
Day_4
Code
demo2.py 726B
opencv_logo.jpg 54KB
demo1.py 304B
demo6.py 868B
demo3.py 466B
demo7.py 565B
demo4.py 1KB
opencv-logo.png 127KB
demo5.py 899B
Image
image2.png 50KB
image8.png 144KB
image9.png 1.4MB
image1.png 205KB
image3.png 360KB
image7.png 18KB
image5.png 12KB
image10.png 4.28MB
image4.png 20KB
image6.png 11KB
README.md 9KB
.gitignore 22B
Day_1
.swp 12KB
Image
image2.png 124KB
image1.png 976KB
image3.png 207KB
image7.png 3.53MB
image5.png 29KB
image4.png 263KB
image6.png 30KB
README.md 5KB
共 55 条
- 1
资源评论
白话Learning
- 粉丝: 3114
- 资源: 2465
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功