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()