1.读取一张图片并显示:
(1)定义了一个字符串变量path
,它存储了要读取的图片的本地路径。
(2)使用OpenCV的imread()
函数读取指定路径下的图片,并将其存储为一个cv::Mat
类型 的 变量img
(3)使用OpenCV的imshow()
函数在新的窗口中显示图片
std::string path = "/home/16THDD/PATH/image.png";
cv::Mat img = imread(path);
imshow("Image", img);
waitKey(0);
2.读取本地一段.mp4视频
(1)创建了一个cv::VideoCapture
对象cap
,并用它打开了指定路径下的视频文件。
(2)打开视频文件
(3)while循环,使用>>
操作符从视频文件中读取每一帧图像,并将其存储到frame
变量中,直 到视频帧的结尾,跳出循环。
(4)使用cv::imshow()
函数显示从视频中读取的当前帧图像。
(5)释放cv::VideoCapture
对象cap
占用的资源。
(6)关闭所有由OpenCV创建的窗口。
cv::VideoCapture cap("/home/16THDD/PATH/big_buck_bunny.mp4");
if(!cap.isOpened())
{
std::cerr << "Failed to open video file" << std::endl;
}
cv::Mat frame;
while(true)
{
cap >> frame;
if(frame.empty())
break;
cv::imshow("Video", frame);
/*这部分是一个条件判断语句,如果用户按下键盘上的Esc键(ASCII码为27),则跳出循环。*/
if(cv::waitKey(10) == 27)
break;
}
cap.release();
cv::destroyAllWindows();
3.读取摄像头的视频流
读取摄像头的视频与读取本地文件类似,只是通过摄像头的URL去读取视频流。
//cv::VideoCapture cap("http://username:password@IP_ADDRESS:PORT");
//根据url读取摄像头视频流并显示,打开一个网络摄像头或RTSP流。
cv::VideoCapture cap("http://192.168.1.243:6666");
if(!cap.isOpened())
{
std::cerr << "Failed to open video file" << std::endl;
}
cv::Mat frame;
while(true)
{
cap >> frame;
if(frame.empty())
break;
cv::imshow("Video", frame);
if(cv::waitKey(10) == 27)
break;
}
cap.release();
cv::destroyAllWindows();