python+OpenCV的图像基本操作
一、计算机如何识别图像
不知道大家有没有感觉,有时在手机上看到的图片有很多小点,图像不够清晰;或者把图片放大,你会发现越放大,也会看到很多小点。
我们先看一张彩色图像,这是一张路飞的图片:
原因是:
一张出现在屏幕上的图片是由无数个像素点组成的,分辨率越高,图片越不清晰,分辨率越低,图片越清晰。
无数个小点放在同一个平面上机会组成一幅我们所看到的图像。
计算机十九通过这些像素点来识别不同的图像,像素点的值在0到255之间。像素点越大,图片就越亮;像素点越小,图片就越暗。
如何识别彩色和黑色图片:
一张彩色的图片是有颜色通道的,由红色(R)、绿色(G)、蓝色(B)组成。
所以一张黑白图是没有颜色通道的。
二、图片的读取与显示
1 #所需要的库
2 import cv2 as cv
3 import matplotlib.pyplot as plt
1 #读取图片cv2.imread("图片路径")
2 img=cv.imread('lufei.jpg')
1 #图像的显示 cv2.imshow(图片展示窗口的名字,设置的读取的图像的参数)
2 cv.imshow("image",img)
3 #等待时间,以毫秒为单位,若将代码中的0改为1000,图像显示1s就会自动退出窗口
4 # 0代表任意键退出窗口
5 cv.waitKey(0)
6 cv.destroyAllWindows()
代码中写有详细解释,请仔细阅读
运行代码出来的结果:
若需要写很多图像的项目时,可将显示的代码放在一个函数中,便于调用:
1 def cv_show(name,img):
2 cv.imshow(name,img)
3 cv.waitKey(0)
4 cv.destroyAllWindows()
三、视频的读取与显示
视频是由一张一张图片组成的,所以读取视频就相当于读取很多张图片,然后将其连起来
cv2.VideoCapture可以捕获摄像头,用数字控制不同的设备,如果是视频文件,直接写好视频路径就好。
1 #读取视频文件
2 video=cv.VideoCapture("iu1.mp4")
1 #判断是否成功读取
2 if video.isOpened():
3 open,frame=video.read()
4 else:
5 open=False
1 #利用while循环一帧一帧的对视频进行读取
2 while open:
3 ret,frame=video.read()
4 if frame is None:
5 break
6 if ret ==True:
7 #转换每一帧的颜色,这里是将每一帧装为灰度图
8 gray=cv.cvtColor(frame,cv.COLOR_BGR2GRAY)
9 cv.imshow("iu1new.mp4",gray)
10 #每一帧等待时间
11 if cv.waitKey(10) %0xFF==27:
12 break
13 video.release()
14 cv.destroyAllWindows()
运行结果就不展示出来了,大家可以找一个视频去运行代码试试。
四、部分图像的截取
cv_show()函数是自己编写用于显示图片的函数,代码已经放在第一部分了。
img[h,w]表示图像的高度和宽度。
1 img=cv.imread("lufei.jpg")
2 lufei=img[0:200,0:200]
3 cv_show("lufei",lufei)
运行结果: