opencv使用
一. 打开图片,旋转图片, 保存图片
import cv2 img = r'./3.jpg' g_res = api_call(img, 'general', 'chinese_print') angle = g_res['data']['json']['general_ocr_res']['rotate_angle'] print(g_res) print(angle) # 纠正原图 img_array = cv2.imread(img) # 路径不带中文 # img_array = cv2.imdecode(np.fromfile(img, dtype=np.uint8), -1) # 路径带中文 if angle == 90: img_array = cv2.rotate(img_array, cv2.ROTATE_90_COUNTERCLOCKWISE) elif angle == -90: img_array = cv2.rotate(img_array, cv2.ROTATE_90_CLOCKWISE) elif angle == 180: img_array = cv2.rotate(img_array, cv2.ROTATE_180) cv2.imwrite(img, img_array) # 保存路径不带中文 # cv2.imencode('.jpg', img_array)[1].tofile(img) # 保存路径带中文
二. python-opencv中cv2.VideoCapture(),read(),waitKey()的使用
1、cap = cv2.VideoCapture(0)
VideoCapture()中参数是0,表示打开笔记本的内置摄像头,参数是视频文件路径则打开视频,如cap = cv2.VideoCapture("…/test.avi")
#计算当前位置在视频中是多少毫秒temp1=cap.get(cv2.CAP_PROP_POS_MSEC)
#计算视频的高temp2=cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
#计算视频的宽temp3=cap.get(cv2.CAP_PROP_FRAME_WIDTH)
#得到视频的帧率temp4=cap.get(cv2.CAP_PROP_FPS)
#得到视频的编码方式temp5=cap.get(cv2.CAP_PROP_FOURCC)
#得到视频的总帧数temp6=cap.get(cv2.CAP_PROP_FRAME_COUNT)
2、摄像头初始化成功
videoCapture.isOpened()
返回True即成功
3、ret,frame = cap.read()
cap.read()按帧读取视频,ret,frame是获cap.read()方法的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。
4.保存视频
cv2.imwrite(savepath, frame)
5、cv2.waitKey(1),waitKey()方法本身表示等待键盘输入,
参数是1,表示延时1ms切换到下一帧图像,对于视频而言
参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停
6、调用release()释放摄像头,调用destroyAllWindows()关闭所有图像窗口。
videoCapture.release()
cv2.destroyAllWindows()
示例:
def vid_img(vid_path): """ 提取视频中的某些帧,返回图片字节流列表 帧率:每秒中的帧数,一帧:视频中一副静止的画面""" vidcap = cv2.VideoCapture(vid_path) fps = vidcap.get(cv2.CAP_PROP_FPS) # 得到视频帧率fps temp6 = vidcap.get(cv2.CAP_PROP_FRAME_COUNT) # 得到视频总帧数 print(fps, temp6) success, image = vidcap.read() # print(success) # print(image) img_bytes_li = [] count = 0 while success: if count % int(fps * 3) == 0: # 每三秒取一帧 temp1 = vidcap.get(cv2.CAP_PROP_POS_MSEC) # 计算当前位置在视频中是多少毫秒 print(temp1) # cv2.imwrite(rf'D:\myPro\chepai\untitled\static\res\res_{count}.jpg', image) # save frame as JPEG file img_bytes = cv2.imencode('.jpg', image)[1].tobytes() img_bytes_li.append(img_bytes) success, image = vidcap.read() # print('Read a new frame: ', success) count += 1 return img_bytes_li
示例二:
用OpenCV调用IP摄像头
#再将以下代码重新运行一下 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()