做seo网站标题重要吗,沂源放心企业网站建设方案报价,自定义颜色 网站,泉州制作网站开发文章目录 处理流程颜色空间二值图像摄像头 python图像处理教程#xff1a;初步#x1f4f7;插值变换#x1f4f7;形态学处理#x1f4f7;滤波
处理流程
opencv是跨平台图像处理库#xff0c;为许多编程语言提供了接口#xff0c;Python自然在列#xff0c;但在使用pip… 文章目录 处理流程颜色空间二值图像摄像头 python图像处理教程初步插值变换形态学处理滤波
处理流程
opencv是跨平台图像处理库为许多编程语言提供了接口Python自然在列但在使用pip安装时需要注意install的是【opencv-python】。
作为专业的图像处理库opencv自然也提供了读取、处理、显示以及保存图片的全流程功能其初步使用如下
import cv2path lena.jpg
imgcv2.imread(path)
img_gray cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)cv2.imshow(img,img)
cv2.imshow(gray,img_gray)cv2.waitKey(0)
cv2.destroyAllWindows()其中
imread用于读取图片。cvtColor用于转换图片的色彩空间【COLOR_RGB2GRAY】表示将RGB图像转换为灰度图像。imshow用于显示图片其两个输入分别是窗口名称与将要显示的图像。waitKey 等待按下键盘输入为等待时间为0则表示不接受按键。destroyAllWindows 用于关闭所有窗口。
弹出窗口如下。 颜色空间
在opencv中通过cvtColor函数可以完成色彩空间的转换其输入参数分别是待转换图像和转换方法其转换方法是已经整形常量其变量名称类似于【RGBA2GRAY】2即To表示从一种颜色空间转向另一种。
GRAY即灰度图像只有一个通道除此之外opencv还提供了许多种颜色空间下面列举三种。
人类对颜色的感知主要是通过红、绿、蓝这三种感光细胞实现的正因如此RGB格式的图像才如此普遍地被接受。如果再加上透明通道Alpha则构成RGBA格式的图像。在opencv中其通道顺序并不一定全都是红绿蓝也可能是蓝绿红即BGR。
但是人类并不能感知不同颜色叠加前后的关联即我们所认知的色彩并不能简单地被三原色直观地表示。为此出现了另一种颜色空间即HSV这三个字母分别表示色相、饱和度以及明度。
如果进一步研究人类对颜色的感知可以将色彩空间分为两个相互正交的色调即红绿色轴(a)和蓝黄轴(b)通过这两个通道就可以表示所有的颜色再加上亮度值L就构成了Lab色彩空间。
二值图像
从颜色空间的定义来说黑白图像也应位列其中只不过这个空间过于狭窄只有黑白两个数值。而其转换方式也很简单只需设置一个阈值 T T T让像素灰度大于 T T T的置为白色否则置为黑色若 T T T不同则转换结果不同。
由于多了一个参数故而opencv并未将其作为一种转换类型而是提供了另一个专用的二值化函数threshold这个函数通过指定阈值和二值化类型以实现从灰度图到二值图像的转换当阈值不同时lena图的二值化情况如下 bImgs {}
for th in [50, 100, 150]:ret, bImg cv2.threshold(img_gray, th, 255, cv2.THRESH_BINARY)bImgs[fth{th}] bImgfor i,key in enumerate(bImgs,1):cv2.namedWindow(key, cv2.WINDOW_NORMAL)cv2.resizeWindow(key, 256, 256)cv2.moveWindow(key, 256*i, 300)cv2.imshow(key, bImgs[key])cv2.waitKey(0)threshold的输入参数分别是灰度图像、阈值、默认值以及二值化类型【THRESH_BINARY】表示当灰度值小于阈值时置0大于阈值时设为默认值在本例中就是255。
此外在打开多个窗口时用到了resizeWindow和moveWindow来更改窗口尺寸以及移动窗口。
摄像头
除了打开图像文件之外在opencv中还可以创建VideoCapture对象可以读取摄像头。下面就打开电脑自带的相机并将其影像二值化之后展示效果如下 绘图代码如下。
cap cv2.VideoCapture(0, cv2.CAP_DSHOW)
flag cap.isOpened()
index 1
while (flag):ret, frame cap.read()gray cv2.cvtColor(frame,cv2.COLOR_RGB2GRAY)ret, bImg cv2.threshold(gray, 125, 255, cv2.THRESH_BINARY)cv2.imshow(camera, bImg)k cv2.waitKey(1) 0xFFif k ord(s):cv2.imwrite(f{index}.jpg, bImg)print(fsave{index}.jpg successfuly!)index 1elif k ord(q):breakcap.release()
cv2.destroyAllWindows()其中cap即为VideoCapture对象cap.read用于读取当前帧其返回值ret是一个成功判定符frame即为抓取到的图像。在读取图像之后将其转灰度并进行二值化最后在camera窗口中显示。
接下来捕捉按键当检测到按下【s】时调用imwrite保存图像当检测到【q】时退出窗口。