python+OpenCV的图像基本操作

一、计算机如何识别图像

不知道大家有没有感觉,有时在手机上看到的图片有很多小点,图像不够清晰;或者把图片放大,你会发现越放大,也会看到很多小点。

我们先看一张彩色图像,这是一张路飞的图片:

python OpenCV contours 截取_ide

 

原因是:

一张出现在屏幕上的图片是由无数个像素点组成的,分辨率越高,图片越不清晰,分辨率越低,图片越清晰。

无数个小点放在同一个平面上机会组成一幅我们所看到的图像。

计算机十九通过这些像素点来识别不同的图像,像素点的值在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()

代码中写有详细解释,请仔细阅读

运行代码出来的结果:

python OpenCV contours 截取_等待时间_02

 

若需要写很多图像的项目时,可将显示的代码放在一个函数中,便于调用: 

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)

 运行结果:

python OpenCV contours 截取_ide_03