开发环境搭建

本人使用的是Ubuntu 16.04LTS。

1、安装Python3

## 其实 Ubuntu 16.04 系统自带了 Python 3.5.2,因此不需要再安装了?但是需要安装一些开发环境。

sudo apt-get update #更新系统源

sudo apt-get install python3 python3.5-dev libpython3.5-dev #安装基础包

sudo apt-get install python3-pip #安装 pip3

sudo pip3 install --upgrade pip #更新 pip3

## 测试

$ python3 --version

Python3.5.2

2、安装Numpy,Matplotlib,OpenCV

这些库可以自己下载源码编译,也有别人编译好的,我们直接下载。

## 安装库

sudo pip3 install numpy #安装 numpy,用于在Python中进行科学计算

sudo pip3 install matplotlib #安装 matplotlib,用于显示、绘图等sudo pip3 install opencv-python #安装 opencv

sudo pip3 install opencv-contrib-python #安装opencv-contrib,包含一些其它库,比如xfeature2d

## 确保 OpenCV 已经安装好

$ python3 -c "import cv2;print(cv2.__version__)"

4.0.0

其实在安装opencv-python时会附带安装numpy,matplotlib安装时也会附带numpy,因为它们都依赖于numpy,如图:

至此,环境基本上已经搭建结束。以后的任务就是开发啦。

附:

#各个版本号

python 2.7.12python33.5.2pip8.1.1pip319.0.3numpy1.16.1matplotlib3.0.2opencv-python 4.0.0.12

Numpy的使用

Numpy 是 Python中的科学计算工具包,可以说是Python中的Matlab。支持向量操作、切片操作、广播,支持多种常用数据类型,内置丰富的线性代数、矩阵算法。由于底层使用多为C语言实现,所以有着较快速度。同时以使用Python接口可以方便地使用 Python 的语法,摆脱静态语言的臃肿,从而实现快速建模、计算和验证。

(1) numpy.ndarray 数组的创建

## --- 创建 np.ndarray 数组 ----

importnumpy as np#使用 Python list 创建

mat1 = np.array([[1,2,3], [4,5,6], [7,8,9]])#使用 np.arange 创建

mat2= np.arange(1,10).reshape(3,3)#使用 zeros/ones/eye 创建

mat3 = np.zeros((3,3))

mat4= np.ones((3,3))

mat5= np.eye(3)print(mat1)print(mat2)print(mat3)print(mat4)print(mat5)

(2) numpy.ndarray 的数据类型

## --- numpy 数据类型(默认 np.int64 或 np.float64) -----#内置多种数据类型,如 np.uint8, np.int32, np.float32, np.float64

a = np.array([[1.25, -16],[32,264.75]], np.float32) #32位浮点型

b = np.array(a, np.int32) #32位整形

c = b.astype("uint8") #8位无符号整型(注意会发生溢出)

print(a)"""[[ 1.25 -16. ]

[ 32. 264.75]]"""

print(b)"""[[ 1 -16]

[ 32 264]]"""

print(c)"""[[1 2 3]

[4 5 6]

[7 8 9]]"""

(3) 索引

## ----- 索引(单坐标、切片、掩模) ------

mat = np.arange(1,10).reshape(3,3)print(mat)## 单坐标

print(mat[2][2]) #9

print(mat[2,2]) #9

## 切片操作

print(mat[:2,:2])"""[[1 2]

[4 5]]"""

## 掩模操作

mask = mat>5

print(mask)"""[[False False False]

[False False True]

[ True True True]]"""mat[mask]= 5

print(mat)"""[[1 2 3]

[4 5 5]

[5 5 5]]"""

(4) 广播 (broadcasting)

## ----- numpy 广播机制(broadcasting) ------#https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html#当操作两个 numpy.ndarray 数组时,如果它们的维度满足一定的关系,则可以进行广播操作。

x = np.arange(4) #(4,)

xt = x.reshape(-1,1) #(4,1)

z = np.ones((3,4)) #(3,4)

print(x+xt)"""[[0 1 2 3]

[1 2 3 4]

[2 3 4 5]

[3 4 5 6]]"""

print(x+z)"""[[ 1. 2. 3. 4.]

[ 1. 2. 3. 4.]

[ 1. 2. 3. 4.]]"""

Matplotlib

[Matplotlib](http://matplotlib.org/) 是 Python 中的可视化库,可以用来绘制高质量的 2D 折线图、散点图、柱状图,或者用来显示图像。分别参考

#使用 matplotlib 绘制一些列缩略图(thumbnails),并显示图像#from scipy.misc import imread, imresize

importmatplotlib.pyplot as pltimportmatplotlib.image as mpimgimportnumpy as np## (1) 绘制随机噪点## 初始化随机种子,并生成随机坐标

np.random.seed(0)

data= np.random.randn(2, 100)## 创建画布

fig, axs = plt.subplots(2, 2, figsize=(5, 5))## 绘制子图

axs[0, 0].hist(data[0])

axs[1, 0].scatter(data[0], data[1])

axs[0,1].plot(data[0], data[1])

axs[1, 1].hist2d(data[0], data[1])## 显示

plt.show()## (2) 绘制图像

img = mpimg.imread("/home/auss/Pictures/test.png")

imgx= img[:,:,0] #取第一个通道

## 创建画布

fig =plt.figure()## 绘制原始图像,并加上颜色条

axs = fig.add_subplot(1,3,1)

ipt=plt.imshow(img)

axs.set_title("origin")

plt.colorbar(ticks=[0.1, 0.3, 0.5, 0.7], orientation='horizontal')## 绘制伪彩色图像,并加上颜色条

axs = fig.add_subplot(1,3,2)

ipt= plt.imshow(imgx,cmap="winter")

axs.set_title("winter")

plt.colorbar(ticks=[0.1, 0.3, 0.5, 0.7], orientation='horizontal')## 绘制直方图

axs = fig.add_subplot(1,3,3)

ipt= plt.hist(imgx.ravel(), bins=256, range=(0, 1.0), fc='k', ec='k')

axs.set_title("histogram")

plt.show()

OpenCV的简单应用

铺垫了这么久,终于到了 OpenCV 了。 OpenCV 的 Python 接口名称为 cv2。通常 OpenCV 内部的算法已经很丰富了,并且提供了 highgui 模块用于显示图像(不过可能有的没有编译该模块)。如果需要进行拓展,则可以配合着 Numpy 进行计算,并结合 Matplotlib 进行显示。

注意,matplotlib 中图像通道为 RGB,而 OpenCV 中图像通道为 BGR。因此进行显示的时候,要注意交换通道的顺序。

这里给出一个 Canny 边缘检测的例子,涉及到图像读写、色彩空间转换、滤波、Canny边缘检测、掩模赋值操作等。

#!/usr/bin/python3#2017.11.02 17:31:24 CST#2017.11.02 17:51:13 CST

importcv2importnumpy as np

img= cv2.imread("firefox.png")## BGR => Gray; 高斯滤波; Canny 边缘检测

gray =cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

gaussed= cv2.GaussianBlur(gray, (3,3), 0)

cannyed= cv2.Canny(gaussed, 10, 220)## 将灰度边缘转化为BGR

cannyed2 =cv2.cvtColor(cannyed, cv2.COLOR_GRAY2BGR)## 创建彩色边缘

mask = cannyed > 0 #边缘掩模

canvas = np.zeros_like(img) #创建画布

canvas[mask] = img[mask] #赋值边缘

## 保存

res = np.hstack((img, cannyed2, canvas)) #组合在一起

cv2.imwrite("result.png", res)        #保存

## 显示

cv2.imshow("canny in opencv", res)#保持10s, 等待按键响应(超时或按键则进行下一步)

key = 0xFF & cv2.waitKey(1000*10)if key in (ord('Q'), ord('q'), 27):## 这部分用作演示用

print("Exiting...")## 销毁窗口

cv2.destroyAllWindows()

python3 opencv_Python3 OpenCV3 图像处理基础相关推荐

  1. python3 opencv_python3 opencv3 实现基本的人脸检测、识别功能

    1 #encoding: utf-8 2 #老杨的猫,环境:PYCHARM,python3.6,opencv3 3 4 importcv2,os5 import cv2.face as fc #此处有 ...

  2. [Python从零到壹] 三十三.图像处理基础篇之什么是图像处理和OpenCV配置

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  3. opencv3 图像处理(一)图像缩放( python与c++ 实现)

    opencv3 图像处理 之 图像缩放( python与c++实现 ) 一. 主要函数介绍 1) 图像大小变换 Resize () 原型: void Resize(const CvArr* src,C ...

  4. python 全景图像拼接( python3.6 + opencv3.4.2.16) 融合

    全景图像拼接 全景图像拼接的手动实现 环境: python3.6 + opencv3.4.2.16 ## 示例图片 本次实验使用的图像拼接素材为以下三张图像: https://andreame.com ...

  5. [Python从零到壹] 三十七.图像处理基础篇之图像融合处理和ROI区域绘制

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  6. [Python从零到壹] 三十九.图像处理基础篇之图像几何变换(镜像仿射透视)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  7. [Python从零到壹] 三十八.图像处理基础篇之图像几何变换(平移缩放旋转)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  8. 图像处理基础教程和工具软件简介

    本文主要介绍了机器视觉图像处理的基础教程和机器视觉开发软件以及图像处理方法工具包,适合于图像处理初学者参考,以尽快利用如下资源入门,并进行简单的图像处理算法的应用和开发,本文介绍的教程.软件安装包和相 ...

  9. Python图像处理基础

    Python图像处理基础 对我个人而言使用Python图像处理意在取代matlab,集中化使用Python环境保证之后在机器学习和OpenCV的使用上具有一致性,虽然从实验室师兄师姐的口中得知Pyth ...

最新文章

  1. A. A Prank
  2. [Java] grails 安装手记
  3. 每次没事情的时候都去学校的活动室或者武术室
  4. kafka可视化客户端工具(Kafka Tool)的基本使用
  5. 通过源码的方式编译hadoop的安装文件
  6. Javascript闭包与作用域
  7. C/C++之函数返回值为指针或者是引用时常见错误总结
  8. 仿真模拟,需要注意这几点!
  9. iPhone是否越狱的检测方法
  10. 20145223 杨梦云 《网络对抗》shellcode实验+return-to-libc实验
  11. Bailian4095 打字员【文本】
  12. 采用Bert进行中文分词
  13. 基于Redis和Tomcat实现集群的Session管理
  14. CAN 通信协议文档集锦
  15. java矩形面积_Java编程求矩形的面积
  16. javascript原生移动云编程1 - 十分钟做出跨平台原生App
  17. 启用计算机上的无线,如何使用命令提示符打开或关闭计算机上的wifi
  18. PHP内核学习(一)SAPI
  19. java-php-python-springboo垃圾分类网站计算机毕业设计
  20. 智能家居第一步: WiFi 设备怎么连上网

热门文章

  1. xgboost重要参数1
  2. 完全理解Python迭代对象、迭代器、生成器
  3. BERT的通俗理解 预训练模型 微调
  4. LeetCode简单题之字符串中的单词数
  5. 加速针对COVID-19的医疗器械开发
  6. 2021年大数据常用语言Scala(十二):基础语法学习 方法调用方式
  7. 线段树——HDU - 1698
  8. python第二十九课——文件读写(复制文件)
  9. 2022-2028年中国木制拼板玩具市场调查研究报告
  10. JavaScript 变量