第一章 OpenCV篇-配置及基础知识-Python
目录
一.Python配置OpenCV
二.图像基本操作
1.数据读取-图像
2.数据读取-视频
三.ROI区域
1.任意提取区域
2.边界填充
四.数值计算
1.图像相加
2.图像融合
此章节主要讲解计算机视觉也就是OpenCV,这是我即将开启的篇章,其中这一章主要运用的语言是Python,内容大致分为安装OpenCV以及数据的读取、ROI区域、数值的计算。
一.Python配置OpenCV
Python安装配置OpenCV的方法如下:
Windows10安装OpenCV的方法,首先确定自己已经安装Python编译环境和编译器。
第一步:安装win+r,打开运行对话框输入“cmd”,进入命令提示符。然后输入:
pip install –i Simple Index opencv-python
pip install opencv-python-headless # 如果不需要GUI功能
pip install opencv-contrib-python # 如果需要额外模块
第二步:打开PyCharm进行测试,输入import cv2和输入如下的代码,若出现的是数字(代表版本号),就说明安装成功可以实现。
注:
若安装没有PyCharm可使用命令提示符,输入以下命令。
先在命令提示符输入Python,进入Python编译环境,再输入import cv2进行导包,再次输入print(cv2.__version__)若输出是版本号则代表安装成功。
第三步:用一个测试程序再次验证是否配置成功。
注:若出现报错,可以先卸载OpenCV,同样打开运行对话框输入“cmd”进入命令提示符,输入pip uninstall openCV-Python ,然后再次重新安装,输入这个程序需要自己准备一张图片放入本地文件夹。
经过上面的测试如果都成功无误,说明Python配置openCV的环境成功了。
二.图像基本操作
在计算机当中一个图像分为R,G,B三颜色,它们分别表示一个图像的颜色,它们由一个矩阵构成,它们在矩阵的取值范围是:0~255。数值递增代表图像呈现越明亮,数值递减代表图像呈现。
最小值为0(最暗),最大值为255(最亮)。
1.数据读取-图像
cv2.IMREAD_COLOR:彩色图像
cv2.IMREAD_GRAYSCALE:灰度图像
cv2.imread(”图片名”):读取一张图片
打印图片的像素点的图如下:
读取并显示一个图片的案例如下:
注:
cv2.imshow(”窗口名”,读取图片的变量):图像显示,也可以创建多个窗口。
cv2.waitKey(0):等待时间,毫秒级,0表示按任意键终止。
cv2.waitKey(100):代表图像呈现时间是100毫秒后自动关闭消失。
cv2.destroyWindows(窗口名称(可省略)):它的作用关闭,指定窗口,若省略窗口名称,则代表关闭所有窗口。
cv2.destroyAllWindows():它的作用是关闭所有窗口。
Image.shape:它是得到图片的尺寸,返回一个元组,元组第一个元素是高,第二个元素是宽,第三个元素是通道数,通道数的意思是颜色通道数也就是RGB。
注:
cv2.IMREAD_GRAYSCALE:灰度图像,它只有颜色通道所以它的shape输出的时候第三个参数就没有。
注:
cv2.imwrite(图片名称,存放图片的变量名称):它的作用是保存一个图片。
注:
type(Image)的类型是numpy.ndarray
size的作用是统计图像像素点的个数。
dtype的作用是表示它的类型是无符号整型。
type是python的数据类型,dtype是numpy的数据类型。
2.数据读取-视频
- cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。
- 如果是视频文件,直接指定好路径即可。
注:
VideoCapture的作用是读取视频,它的参数是视频的路径
vc.read()返回两个值,第一个是读取状态,第二个是读取的帧
isOpened()判断是否正常打开。
注:
cvtColor的作用是把图片从一种颜色空间转换为另一种颜色空间
cv2.waitKey(10) & 0xFF == 27的作用是判断用户是否按下了esc键,如果按下了esc键,就退出循环。
waitKey(数字)代表延迟多少ms(毫秒)
release的作用是释放视频所占的内存
三.ROI区域
1.任意提取区域
语法如下:
imge1 = cv2.imread(‘图片名.扩展名’)
imge2 = img[任意区域(数字):任意区域(数字), 任意区域(数字):任意区域(数字)]
cv2.imshow(image2)
注:
image的区域第一个区域数字小于第二个数字,意思是从第一个到第二个数字的区域
代码演示如下:
提取颜色通道:
注:
r,g,b的shape都是同样的值,并且shape输出没有第三个参数。由于第三个参数代表着颜色通道,提取颜色通道就只有对应的颜色。
通过merge方法,将三原色又重新组合了因此,shape输出的时候第三个参数又输出3
只保留三原色其中一种颜色代码格式:
imge[:,:,0] = 0
imge[:,:,1] = 0
只保留图片红色代码如下:
只保留图片绿色如下:
只保留图片蓝色代码如下:
2.边界填充
边界填充的代码格式如下:
cv2.copyMakeBorder(图像, top, bottom, left, right,边界类型)
边界的类型分为:
constant:常数边界填充
replicate:重复边界填充
reflect:反射边界填充
wrap:镜像边界填充
reflect_101:反射边界填充与reflect的区别是,replicate_101会重复填充最外层的像素
边界代码演示如下:
注:
BORDER REPLICATE:制法,也就是复制最边缘像素。
BORDER REFLECT:反射法,对感兴趣的图像中的像索在两边进行复制例如:fedcbalabcdefghlhgfedcb
BORDER REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcblabcdefghlgfedcba
BORDER WRAP:外包装法cdefghabcdefghlabcdefg
BORDER CONSTANT:常量法,常数值填充。
各个边界图像显示图像如下:
四.数值计算
1.图像相加
opencv有二种加法操作:
(1)直接加法
(2)通过add方法进行相加
直接加法和通过add方法进行相加的差别是:加法会对于相加越界的数据进行256取余操作,而add方法是若相加超过255则保留255不会进行求余和扩充255之外的数据。
直接加法代码演示如下:
输出结果:
注:
若相加得到超过255这个界限值则会对原始数据相加得到的数据进行除以256取余一个操作。
例如:
通过add方法进行像素相加演示代码如下:
注:
cv2.add方法进行相加若越界则不会求余只保留边界数(255)
2.图像融合
图像融合,最好要是两张图片尺寸相同,若不同的话,可以进行尺寸的resize
调整图像大小的方法格式如下:
cv2.resize(cv2对象,(高,宽))
融合图像方法如下:
cv2.addWeighted(图像1,图像1的权重 ,图像2,图像2的权重,权重偏移量)
cv2.addWeighted的各个参数代表:
第一个参数:第一个图像
第二个参数:第一个图像的权重
第三个参数:第二个图像
第四个参数:第二个图像的权重
第五个参数:权重的偏移量
代码演示如下:
图像呈现如下:
注:
cv2.addWeighted的公式如下:
cv2.addWeighted第一个参数代表
cv2.addWeighted第二个参数代表A
cv2.addWeighted第三个参数代表
cv2.addWeighted第四个参数代表B
cv2.addWeighted第五个参数代表b
cv2.addWeightedR代表图像的结果