opencv对图像进行操作,因为图片有时候总是不能完全显示出来,因此我希望先对图像进行一下缩放然后再显示出来。也有时候需要让图像进行旋转,因此也写了一个函数.
1、读入视频
rtsp协议读入海康威视摄像头的视频流,并显示出来。rtsp协议中的url写法如下:'rtsp://admin:password@ip:port//11‘其中ip是摄像头的ip,port是rtsp端口默认为554端口。参考:(https://blog.csdn.net/Zhou_yongzhe/article/details/80310537)和
#以下是最常用的读取视频流的方法
import cv2
url = 'rtsp://admin:password@192.168.1.104:554/11'
cap = cv2.VideoCapture(url)
while(cap.isOpened()):
# Capture frame-by-frame
ret, frame = cap.read()
# Display the resulting frame
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
其中函数的说明如下:
- VideoCapture():参数为0表示调用笔记本自带摄像头,参数同样也可以为视频路径,或者网址。
- ret,frame = cap.read():cap.read()按帧读取视频,ret,frame是获cap.read()方法的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。
- cv2.waitKey(1):waitKey()方法表示暂停脚本执行,等待键盘输入。参数是1,表示延时1ms切换到下一帧图像,对于视频而言;参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停;cv2.waitKey(1000),表示等待1秒。
- release():释放摄像头。
- destroyAllWindows():关闭所有图像窗口。
2、视频缩放
(h,w)=img.shape:图像矩阵的维数
cv2.resize(img,(w,h),)#这里维数要写成(w,h)的形式。
3、图形旋转
M = cv2.getRotationMatrix2D(center, 180, 1):图像旋转180度,center旋转的中心点,放大倍数为1倍,得到一个二维矩阵 rotated = cv2.warpAffine(image, M, (w,h)):将二维矩阵变成图像
4、图像保存
保存图像很简单,直接用cv2.imwrite即可。
对于jpg格式:
cv2.imwrite("D:\\cat2.jpg", img)
第一个参数是保存的路径及文件名,第二个是图像矩阵。其中,imwrite()有个可选的第三个参数,如下:
cv2.imwrite("D:\\cat2.jpg", img,[int(cv2.IMWRITE_JPEG_QUALITY), 5])
第三个参数针对特定的格式: 对于JPEG,其表示的是图像的质量,用0-100的整数表示,默认为95。 注意,cv2.IMWRITE_JPEG_QUALITY类型为Long,必须转换成int。下面是以不同质量存
对于PNG,第三个参数表示的是压缩级别。cv2.IMWRITE_PNG_COMPRESSION,从0到9,压缩级别越高,图像尺寸越小。默认级别为3: