1.数据读取-图像
cv.imread( )函数读取图像
1.1读取图像的几种方式:
cv.IMREAD_COLOR:加载彩色图像
cv.IMREAD_GRAYSCALE:加载灰度图像
cv.IMREAD_UNCHANGED:加载图像,包括alpha通道
import numpy as np
import cv2 as cv
#加载彩色灰度图像
img = cv.imread('C:\Users\Dell\Pictures\Camera Roll\crown.png',0)
运行结果如下:
2.显示图像
cv.imshow() 窗口自动适合图像尺寸
cv.imshow('C:\Users\Dell\Pictures\Camera Roll\crown.png',img)
cv.waitKey(0)
cv.destroyAllWindows()
运行结果如下:
注意:其中,cv.waitKey() 是一个键盘指定函数,该函数等待任何键盘事件指定的毫秒。如果您在这段时间内按下任何键,程序将继续运行。如果**0**被传递,它将无限期地等待一次敲击键。它也可以设置为检测特定的按键,cv.destroyAllWindows()只会破坏我们创建的所有窗口。如果要销毁任何特定的窗口,请使用函数 cv.destroyWindow()在其中传递确切的窗口名称作为参数。
3.写入图像
cv.imwrite文件名,要保存的图像),例:cv.imwrite('messigray.png',img)
import numpy as np
import cv2 as cv
#读取图像
img = cv.imread('messi5.jpg',0)
#显示图像
cv.imshow('image',img)
#等待
k = cv.waitKey(0)
if k == 27: # 等待ESC退出
cv.destroyAllWindows()
elif k == ord('s'): # 等待关键字,保存和退出
cv.imwrite('messigray.png',img)
cv.destroyAllWindows()
4.从相机中读取视频
捕获视频:创建VideoCapture对象(参数:设备索引/视频文件)
import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
if not cap.isOpened():
print("Cannot open camera")
exit()
while True:
# 逐帧捕获
ret, frame = cap.read()
# 如果正确读取帧,ret为True
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
# 我们在框架上的操作到这里
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
# 显示结果帧e
cv.imshow('frame', gray)
if cv.waitKey(1) == ord('q'):
break
# 完成所有操作后,释放捕获器
cap.release()
cv.destroyAllWindows()
cap.read()
返回布尔值(True
/ False
)。如果正确读取了帧,它将为True
。因此,你可以通过检查此返回值来检查视频的结尾。
有时,cap可能尚未初始化捕获。在这种情况下,此代码显示错误。你可以通过**cap.isOpened**()方法检查它是否已初始化。如果是True
,那么确定。否则,使用**cap.open**()打开它。
你还可以使用cap.get(propId)
方法访问该视频的某些功能,其中propId是0到18之间的一个数字。每个数字表示视频的属性(如果适用于该视频),并且可以显示完整的详细信息在这里看到:cv::VideoCapture::get()。其中一些值可以使用cap.set(propId,value)
进行修改。value
是你想要的新值。
例如,我可以通过cap.get(cv.CAP_PROP_FRAME_WIDTH)
和cap.get(cv.CAP_PROP_FRAME_HEIGHT)
检查框架的宽度和高度。默认情况下,它的分辨率为640x480。但我想将其修改为320x240。只需使用和即可。ret = cap.set(cv.CAP_PROP_FRAME_WIDTH,320)
and ret = cap.set(cv.CAP_PROP_FRAME_HEIGHT,240)
.