读取图片
设定好图片路径,用imread就可以读取存放为Mat格式,用imshow显示图片就ok了。
std::string Path =
"D:/Qttemp/OpencvStudy/chapter1/OpencvCourse/Resources/1.jpg";
Mat img = imread(Path);
if (img.empty()) {
spdlog::error("读取图像失败: {}", Path);
return 1;
}
imshow("OpenCV 测试", img);
这里用的绝对路径,显示效果就不展示了,免得侵权。
读取视频
视频文件其实是个图片组,用while循环videocapture读取出来存放到一个变量,然后和显示图片一样显示就行了
std::string Path =
"D:/Qttemp/OpencvStudy/chapter1/OpencvCourse/Resources/1.mp4";
VideoCapture cap(Path);
Mat frame;
while(true){
cap.read(frame);
imshow("OpenCV test", frame);
waitKey(1);
waitkey可以间接控制视频的播放速率
另外这段demo其实有个问题,点击关闭的时候会发现视频重新弹出关不掉,这是因为while循环一直是true,没有打破循环的条件,这里也是和显示图片有区别的地方。我们只需要改动一下代码
int key = waitKey(30);
if (key == 27) {
break;
}
key=27的时候就是用户按下esc键,会打破while循环解决,加上
cap.release();
destroyAllWindows();
这一段是释放资源关闭所有opencv显示窗口,操作就很丝滑没那些问题了。
效果:

没有处理按关闭键的,只处理按esc键的,按下程序就可以正常退出了。但其实还是很不爽,因为关闭按钮没法关闭,因为这个窗口的组件我没法获取,imshow创建的窗口不好控制,这个可以自己实现一个窗口来控制关闭。