Python包-OpenCV_图像处理

官方文档

pypi:opencv-python
OpenCV-Python Tutorials

参考网址

http://wiki.opencv.org.cn/index.php/%E9%A6%96%E9%A1%B5

http://www.opencv.org.cn/opencvdoc/2.3.2/html/index.html

http://opencv.org/

官网下载经常会有断,python 2.7 可以在github上的备份中获取;
下载文件后,解压,并将文件放入python的库中即可;
同时使用open CV需要另一个python的库文件。Numpy; 该model可以直接通过python安装命令进行安装;

安装

1
2
3
pip install opencv-python # 通过pip安装openCV

python -m pip install numpy # 通过pip安装openCV

基本的使用

包的导入

1
2
import numpy as np
import cv2

文件的读取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
cv2.namedWindow('image', cv2.WINDOW_NORMAL) #cv2.WINDOW_AUTOSIZE 窗口不可调节;
cv2.namedWindow('image', cv2.WINDOW_NORMAL) #cv2.WINDOW_NORMAL 窗口大小可以调节;

# Load an color image in grayscale
img = cv2.imread('D:/github/Personal-TestDemo/openCV/testInputData/1.png')

cv2.imshow('image',img) #展示图片,必须紧跟waitKey,否则可能出现图片不显示灰色背景
cv2.waitKey(10) #等待键盘输入
cv2.destroyAllWindows() #关闭窗口
print img
```

## 图像操作
### 绘制
#### 绘制直线
``` python
cv2.line(img,(0,0),(150,150),(2,255,255),5)
# cv2.line()接受以下参数:图片,开始坐标,结束坐标,颜色(bgr),线条粗细。
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

绘制矩形

1
2
cv2.rectangle(img,(15,25),(200,150),(0,0,255),15)
# 图像,左上角坐标,右下角坐标,颜色和线条粗细。

绘制圆

1
2
cv2.circle(img,(100,63), 55, (0,255,0), -1)
# 这里的参数是图像/帧,圆心,半径,颜色和粗细。 粗细-1 表示填充

添加文字

1
2
cv2.putText(img, 'OpenCV Tuts!',(10,400), font, 2, (200,255,155), 5, cv2.LINE_AA)
#参数依次为 图片,文字,文字起始位置,font,文字大小,文字颜色,文字粗细,cv2.LINE_AA

图像操作

更改像素

1
2
3
4
5
px = img[55,55] # 获取某个像素点的颜色
img[55,55] = [255,255,255] # 修改某个位点的像素

px = img[100:150,100:150] # 获取某个区域的颜色
img[100:150,100:150] = [255,255,255] # 修改某个区域的颜色

图像算术和逻辑运算

1
2
3
4
5
6
7
# 读取两个图像
img1 = cv2.imread('3D-Matplotlib.png')
img2 = cv2.imread('mainsvmimage.png')
add = img1+img2 # 对图像求和,对每个像素的三个颜色通道分别求和,由于颜色值的范围是0~255,所以超过255的会求和结果为255
cv2.imshow('add',add)
cv2.waitKey(0)
cv2.destroyAllWindows()

阈值

阈值的思想是进一步简化视觉数据的分析。首先,你可以转换为灰度,但是你必须考虑灰度仍然有至少 255 个值。阈值可以做的事情,在最基本的层面上,是基于阈值将所有东西都转换成白色或黑色。比方说,我们希望阈值为 125(最大为 255),那么 125 以下的所有内容都将被转换为 0 或黑色,而高于 125 的所有内容都将被转换为 255 或白色。如果你像平常一样转换成灰度,你会变成白色和黑色。如果你不转换灰度,你会得到二值化的图片,但会有颜色。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 硬阈值过滤
retval, threshold = cv2.threshold(img, 150, 255, cv2.THRESH_BINARY)
# 参数分别为(图像,阈值,最大值,阈值类型),通常情况下,125-150 左右的东西可能效果最好。如果图片过暗需要调低,过亮需要调高。
cv2.imshow('origin',img)
cv2.imshow('threshold',threshold)
cv2.waitKey(0)
cv2.destroyAllWindows()


# 自适应阈值
grayscaled = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #将图片变为灰度图片
kernel=np.ones((2,2),np.uint8) #进行腐蚀膨胀操作
th = cv2.adaptiveThreshold(grayscaled, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 115, 1)
cv2.imshow('original',img)
cv2.imshow('Adaptive threshold',th)
cv2.waitKey(0)

颜色过滤

创建一个过滤器,回顾按位操作,其中我们将过滤特定的颜色,试图显示它。或者,你也可以专门筛选出特定的颜色,然后将其替换为场景,就像我们用其他方法替换ROI(图像区域)一样,就像绿屏的工作方式。

为了像这样过滤,你有几个选项。通常,你可能会将你的颜色转换为 HSV,即“色调饱和度纯度”。例如,这可以帮助你根据色调和饱和度范围,使用变化的值确定一个更具体的颜色。如果你希望的话,你可以实际生成基于 BGR 值的过滤器,但是这会有点困难。如果你很难可视化 HSV,不要感到失落,查看维基百科页面上的 HSV,那里有一个非常有用的图形让你可视化它。

参考资料

CSDN: SGchi : openCV超详细入门教程(python版)

-------------本文结束感谢您的阅读-------------