1.读取并显示图像
opencv 支持读取bmp,jpg,png,tiff等常用格式
import cv2
img=cv2.imread(“D:\cat.jpg”)
cv2.imshow(“Image”,img) #在窗口中显示图像
cv2.waitKey(0) #如不添加这句,在IDLE中执行窗口直接无响应
cv2.destroyAllWindows() #最后释放窗口
2.创建复制图像
opencv接口中没有CreateImage接口,故若要创建对象则要作用numpy函数。
emptyImage=np.zeros(img.shape,np.uint8)
或者复制原来的图像来创建对象
emptyImage2=img.copy()
或者用cvtColor获得原图像的副本
emptyImage3=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #将原来图像的RGB转换成Gray,因为opencv中RGB是倒过来的写的
cv2.COLOR_BGR2GRAY #BGR图像转换为灰度图像
cv2.COLOR_BGR2RGB #BGR格式图像转换为RGB格式图像
cv2.COLOR_GRAY2BGR #灰度图像转换成BGR图像
3.保存图像
输入文件名和待保存对象即可,函数imwrite()会根据文件后缀自动转换图像
cv2.imwrite(“D:\cat2.jpg”,img) #将处理好的img为图像矩阵存为cat2.jpg
cv2.imwrite(“./cat.png”,img,[int(cv2.IMWRIGE_PNG_COMPRESSION),9]) #IMWRIGE_PNG_COMPRESSION 此参数表示的是压缩级别,从0-9,压缩级别越高,图像尺寸越小,默认级别为3
cv2.imwrite(“D:\cat2.jpg”,img,[int(cv2.IMWRITE_JPEG_QUALITY),5]) #cv2.IMWRITE_JPEG_QUALITY为long,必须转换成int,它表示的是图像的质量,用0-100的整数表示
4.opencv基本函数功能
reasize()实现放大缩小,声明如下:
cv2.resize(src,dsize[,dst[fx,fy],interpolation])
eg:img_ex = cv2.resize(img, (2*cols, 2*rows), interpolation=cv2.INTER_CUBIC) #放大2倍,2*cols,2*row
img_zo = cv2.resize(img, (cols/2, rows/2), interpolation=cv2.INTER_AREA) #缩小为原来的一半
img_zo = cv2.resize(img, (cols/2, rows/2), interpolation=cv2.INTER_AREA)
平移可以由平移矩阵描述:
这里我们利用np.array()来创建,然后调用warpAffine来实现,并保持图像的大小不变。
M = np.array([[1, 0, 50],[0, 1, 50]], np.float32)
img_tr =cv2.warpAffine(img, M, img.shape[:2])
其中warpAffine()的声明如下:
cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) → dst
旋转
利用getRotationMatrix2D()获得旋转矩阵,然后利用warpAffine()函数来实现
getRotationMatrix2D()其声明如下:
cv2.getRotationMatrix2D(center, angle, scale) → retval
M=cv2.getRotationMatrix2D((cols/2,rows/2), 45, 1)
img_ro =cv2.warpAffine(img, M, img.shape[:2])
视频读入代码如下:
mport cv2
#设置视频捕获
cap=cv2.VideoCapture(0)
#循环
while True:
ret,im=cap.read()
#显示在窗口上
cv2.imshow('video test', im)
key=cv2.waitKey(10)
if key==27:
break
if key==ord('' ):
cv2.imwrite('vid_result.jpg', im)
程序详解:
1.捕获对象VideoCapture从摄像头或文件捕获视频。通过一个整数进行初始化,该整数为视频设备的id:如果仅有一个摄像头与计算机相连接,那么该摄像头的id为0;
2.read()方法解码并返回下一视频帧,第一个变量ret是一个判断视频帧是否成功读入的标志,第二个变量则是实际读入的图像数组;
2.函数waitKey()等待用户按键,如果按下的是Esc(ASCII码是27)键,则退出应用;如果按下的是空格键,就保存该视频帧