引入包代码,代码示例的变量都是一样,只说明一次,变量会重复使用
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,(文件名) |
OutputArray | dst, (图片加载目标) | ||
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,(窗口名称) |
InputArray | mat (图片数据,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,(文件名) |
InputArray | img,(图片数据) | ||
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()
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_pyhttps://gitee.com/self_8/opencv_py.git