【OpenCV】API讲解(二) 图形界面的操作

引入包代码,代码示例的变量都是一样,只说明一次,变量会重复使用

import cv2 as cv

一. 图片

img = cv.imread(cv.samples.findFile("starry_night.jpg"))

找到文件的路径:cv.samples.findFile

cv::String cv::samples::findFile(const cv::String & relative_path,(相对路径)
bool required = true,
bool silentMode = false 
)

 因为opencv源代码是C++,所以文档会提供类似上面的API,怎么看呢?这里会解释,之后就不再解释了!如果对类型和enum等感兴趣,可以点击链接跳转看详细文档。

cv::String cv::samples::findFile:该函数调用:cv.samples.findFile(),返回值是String

可传三个出参数,relative_path相对路径(String),剩余两个参数不常用。

相当于Python:

cv.samples.findFile(relative_path[, required[, silentMode]]) ->retval

读取图片:cv.imread

CV_EXPORTS_W Mat cv::imread(const String & filename,(文件名,可通过findFile得到)
int flags = IMREAD_COLOR_BGR (常用这种模式)
)

CV_EXPORTS_W void cv::imread(const String & filename,(文件名)
OutputArraydst, (图片加载目标)
int flags = IMREAD_COLOR_BGR 
)

支持的图片格式:

 bitmap (bmp),pgm, ppm

Sun raster (sr, ras)

JPEG (jpeg, jpg, jpe), JPEG 2000

TIFF files (tiff, tif) 

png

EXR

检测是否读取成功:

if img is None:
    sys.exit("Could not read the image.")

开启窗口显示图片:cv.imshow

void cv::imshow(const String & winname,(窗口名称)
InputArraymat (图片数据,imread可获得)
)

等待按键触发:cv.waitKey

int cv::waitKey(int delay = 0)

注:cv::imshow函数后面需要加上cv::waitKey函数,让程序等待你的操作而不至于闪退。

  • waitKey(0),表示程序会无限制的等待用户的按键事件;
  • waitKey(1),表示程序每1ms检测一次按键,检测到返回按键值,检测不到返回-1;
  • waitKey(100),表示程序每100ms检测一次按键,检测到返回按键值,检测不到返回-1;

写图片文件:cv.imwrite

CV_EXPORTS_W bool cv::imwrite(const String & filename,(文件名)
InputArrayimg,(图片数据)
const std::vector< int > & params = std::vector< int >() 
)
if k == ord("s"):
    // 如果用户按下s键,写入保存图片
    cv.imwrite("starry_night.png", img)

二. 视频

1. 读取视频VideoCapture 

从摄像头:

cap = cv.VideoCapture(0)

从文件:

cap = cv.VideoCapture('vtest.avi')

2. 显示视频(展示每一帧)

while True:
    ret, frame = cap.read()
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    cv.imshow('frame', gray)
    if cv.waitKey(1) == ord('q'):
        break

3. 释放资源

cap.release()

cv.destroyAllWindows()

4. 保存视频

创建写入的容器:

fourcc = cv.VideoWriter_fourcc(*'XVID')

out = cv.VideoWriter('output.avi', fourcc, 20.0, (640, 480))

写入每一帧:

frame = cv.flip(frame, 0)

out.write(frame)

释放资源:

out.release()

支持的图片格式:

  • Fedora:  DIVX, XVID, MJPG, X264, WMV1, WMV2.  (XVID常用. MJPG体积大. X264体积小)
  • Windows: DIVX (测试)
  • OSX: MJPG (.mp4), DIVX (.avi), X264 (.mkv).

代码git地址:self/opencv_pyicon-default.png?t=O83Ahttps://gitee.com/self_8/opencv_py.git

  • 13
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值