第二次课后作业
作业任务:简单处理一张图像
处理想法
选取一个物体,对它进行两种不同的图像处理,然后拼接起来
处理思路
"1234"指输出窗口的编号
工程实现
1.导入库,读取图像(键盘)
# 引入cv2和numpy库
import cv2
import time
from cv2 import cv2
import numpy as np
start =time.clock() # 代码开始运行的时刻
img = cv2.imread("E:\\18023\\Pictures\\Camera Roll\\keyboard.png") # 读取图像
cv2.imshow('1', img) # 输出处理前的图像
2.腐蚀膨胀处理
# 用椭圆结构进行膨胀腐蚀处理 (上面的键盘)
kernel = cv2.getStructuringElement(
cv2.MORPH_ELLIPSE, (10, 10)) # 椭圆结构:MORPH_ELLIPSE
img1 = cv2.erode(img, kernel) # 腐蚀
img1 = cv2.dilate(img, kernel) # 膨胀
cv2.imshow('2', img1) # 输出腐蚀膨胀后的图像
img1 = img1[200:390, 120:675] # 截取键盘区域
3.BGR调色处理
img2 = img.copy() # 复制一张原图
src = img2[200:390, 120:675] # 截取键盘区域
# 获取图像高度宽度
imgInfo = src.shape
height = imgInfo[0]
weight = imgInfo[1]
# 更改BGR参数 (下面的键盘)
dst = np.zeros((height, weight, 3), np.uint8) # 返回给定形状和类型的新数组
for i in range(0, height):
for j in range(0, weight):
(b, g, r) = src[i, j]
# 分别将BGR增加一定数值 目的是将绿色的键帽改为粉色
b += 120
g += 50
r += 180
# BGR值不超过255
if b > 255:
b = 255
if g > 255:
g = 255
if r > 255:
r = 255
# 将新的BGR值赋予图像
dst[i, j] = (b, g, r)
img2[200:390, 120:675] = dst # 指定位置填充
cv2.imshow('3', img2) # 输出只改了键盘颜色的图像
4.拼接图像
# 将键盘区域的图像截图添加到原图的上下位置
img[10:200, 120:675] = img1 # 指定位置填充,大小要一样才能填充
img[400:590, 120:675] = dst # 指定位置填充,大小要一样才能填充
5.绘制图像方框并输出图像
# 绘制键盘外围方框 创建数组 定义四个顶点坐标
pts = np.array([[120, 10], [120, 590], [675, 590], [675, 10]], np.int32)
# 顶点个数:4,矩阵变成4*1*2维,OpenCV中需要将多边形的顶点坐标变成顶点数×1×2维的矩阵
# 这里 reshape 的第一个参数为-1, 表示“任意”,意思是这一维的值是根据后面的维度的计算出来的
pts = pts.reshape((-1, 1, 2))
cv2.polylines(img, [pts], True, (0, 0, 0)) # 框线为黑色 画框
# 输出拼接完成的图像
cv2.imshow('4', img)
end = time.clock() # 代码停止运行的时刻
print('Running time: %s Seconds'%(end-start)) # 输出代码运行时间
cv2.waitKey(0)
Running time: 1.06 Seconds
引入numpy比python自带的列表运算速度更快
学习心得
1.使用OpenCV的工具包:
- imshow 输出
- imread 读取
- copy 复制
- shape 图像三围
- polylines 绘制多线
- waitkey 等待按键
- erode 腐蚀
- dilate 膨胀
- MORPH_RECT 矩形
- MORPH_CROSS 交叉形
- MORPH_ELLIPSE 椭圆形
- reshape 矩阵变维
2.使用numpy的工具包:
一个python的科学计算软件包,应用在数据分析、机器学习、科学运算等领域
- array 数组
- zeros 全零数组
3.复习python的一些语法:
- range 范围
- a = a+1又可表示为a += 1
- for的嵌套循环
4.了解了一些图像处理的方法
- 更改颜色模式(RGB,HSV)
- 对像素点进行颜色操作
- 腐蚀和膨胀
- 选取像素点区域