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:myProchepaiuntitledstatic
es
es_{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()  

免责声明:文章转载自《opencv使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇laravel使用ORM或者DB使用select进行查询指定字段时,可以给字段设置固定值F5 关于websocket下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

微信小程序中使用Vant Weapp的ActionSheet上拉菜单出现的样式问题

以下修改的源码均在action-sheet组件中。在index.wxss:2.下方的取消按钮不居中,通过审查元素发现它的宽带已经超出了手机屏幕的宽度,出现的滚动条导致的,具体什么原因导致暂时不知,解决方案是给.van-action-sheet__cancel添加样式box-sizing:border-box可解决。在index.wxss:.van-actio...

数据可视化之powerBI技巧(十四)采悟:PowerBI中自制中文单位万和亿

最令人不快的事情之一是数据单元的设置。现在让我们看看如何通过设置测量值来切换单位。需要动态选择1万元和1亿元的单位进行显示。首先,手动创建单位表,然后使用单位表中的[unit]字段生成切片器。下一步是建立销售衡量标准。销售额=总和('订单'[销售额])为了按过滤单位显示销售额,SELECTEDVALUE函数可以根据切片器选择动态更改分母。如果切片器未进行任何...

如何在Android模拟器上安装apk文件

如本实例的“mishop_2.0.20130911_1.1.1.apk”3.执行控制台命令,进行安装。切换到D盘,输入D:,然后点击Enter,即切换到D盘,输入cd,找到platform-tools的文件地址,即adb.exe的文件路径。,粘贴在控制台中。...

jenkins之部署、启动、关闭

jenkins可以通过内置的应用服务器或者借助其他应用服务器启动目录1、启动jenkins2、关闭jenkins3、重启jenkins4、重新加载jenkins配置信息前言:部署jenkins应用,是要安装java的,最新版本的jenkins是需要按照1.8版本的jdk,不然启动不了。...

js获取移动端设备信息(IMEM,IMIS,手机型号,系统版本,浏览器信息等)

方法1:HTML+打包方法、附加配置和使用指定方法打包是可用属性:imei:device的国际移动设备ID imsi:device的国际移动用户ID型号:device的型号供应商:device制造商uuid:device唯一标识参考地址:http://www.html5plus.org/doc/zh_cn/device.html方法2:引用插件mobile-...

fiddler抓包+雷电模拟器 完成手机app抓包的配置

找到系统应用,点击设置,点击无线网络WLAN—˃左键常按点击已连接网络—˃修改网络鼠标左键长按在桌面找到下面这个文件之后双击打开上面证书弄完之后。可以说本机已经安装过证书了,如果你能在模拟器上找到这个证书就不用将这个证书再拉入模拟器了在模拟器中打开系统应用—˃设置—˃安全—˃从SD卡安装。找到FiddlerRoot.cer文件,按提示导入即可,注意在此过程需...