admin管理员组文章数量:1569960
Qt中设置、打开、捕获、显示网络摄像头的方法:
一、打开网络摄像头并使用
void MainWindow::on_pushButton_clicked()
{
Mat img;
Mat img_2;
cv::VideoCapture vcap;
cv::Mat image;
const std::string videoStreamAddress = getCamUrl().toStdString();
std::cout << "Address:" <<videoStreamAddress<< std::endl;
if(!vcap.open(videoStreamAddress)) {
std::cout << "Error opening video stream or file" << std::endl;
}
cv::namedWindow("Output Window");
for(;;) {
if(!vcap.read(image)) {
std::cout << "No frame" << std::endl;
cv::waitKey();
}
if(!vcap.read(img)){
cout<<"vedio read end!"<<endl;
break;
}
if(!vcap.read(img_2)){
cout<<"vedio read end!"<<endl;
break;
}
cv::imshow("Output Window", image);
if(cv::waitKey(1) >= 0) break;
checkImage(img,img_2);
qApp->processEvents();
}
}
//获取摄像头url
QString MainWindow::getCamUrl(){
QString ret="";
switch (type) {
case CAM_HK:
ret=mkUrlHK();
break;
case CAM_DH:
ret=mkUrlDH();
break;
case CAM_UV:
ret=mkUrlUV();
break;
case CAM_WA:
ret=mkUrlWA();
break;
case CAM_XLW:
mkUrlXLW();
break;
default:
break;
}
return ret;
}
QString MainWindow::mkUrlHK(){
QString ret="";
//boost::format fmt("rtsp://%1%:%2%@%3:%4/h264/ch1/%5%/av_stream");
if(codec==CODEC_MAIN){
ret=QString::asprintf("rtsp://%s:%s@%s:%s/h264/ch1/%s/av_stream", username.toLatin1().data(), password.toLatin1().data(), ip.toLatin1().data(), port.toLatin1().data(), "main");
//fmt %username.toStdString() %password.toStdString() %ip.toStdString() %port.toStdString() %"main";
} else {
ret=QString::asprintf("rtsp://%s:%s@%s:%s/h264/ch1/%s/av_stream", username.toLatin1().data(), password.toLatin1().data(), ip.toLatin1().data(), port.toLatin1().data(), "sub");
//fmt %username.toStdString() %password.toStdString() %ip.toStdString() %port.toStdString() %"sub";
}
//ret=QString::fromStdString(fmt.str());
return ret;
}
QString MainWindow::mkUrlDH(){
QString ret="";
//boost::format fmt("rtsp://%1%:%2%@%3:%4/cam/realmonitor?channel=1&subtype=%5%");
if(codec==CODEC_MAIN){
ret=QString::asprintf("rtsp://%s:%s@%s:%s/cam/realmonitor?channel=1&subtype=%s", username.toLatin1().data(), password.toLatin1().data(), ip.toLatin1().data(), port.toLatin1().data(), "0");
//fmt %username.toStdString() %password.toStdString() %ip.toStdString() %port.toStdString() %"0";
} else {
ret=QString::asprintf("rtsp://%s:%s@%s:%s/cam/realmonitor?channel=1&subtype=%s", username.toLatin1().data(), password.toLatin1().data(), ip.toLatin1().data(), port.toLatin1().data(), "1");
//fmt %username.toStdString() %password.toStdString() %ip.toStdString() %port.toStdString() %"1";
}
//ret=QString::fromStdString(fmt.str());
return ret;
}
QString MainWindow::mkUrlUV(){
QString ret="";
//boost::format fmt("rtsp://%1%:%2%@%3:%4/%5%");
if(codec==CODEC_MAIN){
//fmt %username.toStdString() %password.toStdString() %ip.toStdString() %port.toStdString() %"video1";
ret=QString::asprintf("rtsp://%s:%s@%s:%s/%s", username.toLatin1().data(), password.toLatin1().data(), ip.toLatin1().data(), port.toLatin1().data(), "video1");
} else {
//fmt %username.toStdString() %password.toStdString() %ip.toStdString() %port.toStdString() %"video2";
ret=QString::asprintf("rtsp://%s:%s@%s:%s/%s", username.toLatin1().data(), password.toLatin1().data(), ip.toLatin1().data(), port.toLatin1().data(), "video2");
}
//ret=QString::fromStdString(fmt.str());
return ret;
}
QString MainWindow::mkUrlWA(){
QString ret="";
//boost::format fmt("rtsp://%1%:%2%@%3:%4/h264");
//fmt %username.toStdString() %password.toStdString() %ip.toStdString() %port.toStdString();
//ret=QString::asprintf("rtsp://%s:%s@%s:%s/h264", username.toLatin1().data(), password.toLatin1().data(), ip.toLatin1().data(), port.toLatin1().data());
//ret=QString::fromStdString(fmt.str());
if(codec==CODEC_MAIN){
//fmt %username.toStdString() %password.toStdString() %ip.toStdString() %port.toStdString() %"video1";
ret=QString::asprintf("rtsp://%s:%s@%s:%s/h264", username.toLatin1().data(), password.toLatin1().data(), ip.toLatin1().data(), "8557");//port.toLatin1().data()
} else {
//fmt %username.toStdString() %password.toStdString() %ip.toStdString() %port.toStdString() %"video2";
ret=QString::asprintf("rtsp://%s:%s@%s:%s/h264", username.toLatin1().data(), password.toLatin1().data(), ip.toLatin1().data(), "8558");
}
return ret;
}
QString MainWindow::mkUrlXLW(){
QString ret="";
//boost::format fmt("rtsp://%1%:%2%@%3:%4/%5%");
if(codec==CODEC_MAIN){
//fmt %username.toStdString() %password.toStdString() %ip.toStdString() %port.toStdString() %"video1";
ret=QString::asprintf("rtsp://%s:%s@%s:%s/%s", username.toLatin1().data(), password.toLatin1().data(), ip.toLatin1().data(), port.toLatin1().data(), "h264ESVideoTest");
} else {
//fmt %username.toStdString() %password.toStdString() %ip.toStdString() %port.toStdString() %"video2";
ret=QString::asprintf("rtsp://%s:%s@%s:%s/%s", username.toLatin1().data(), password.toLatin1().data(), ip.toLatin1().data(), port.toLatin1().data(), "h264ESVideoTestSecond");
}
//ret=QString::fromStdString(fmt.str());
return ret;
}
二、打开本地视频
void MainWindow::on_pushButton_clicked()
{
Mat img;
Mat img_2;
VideoCapture cap("d://123.mp4"); //打开本地视频文件
while(1){
if(!cap.read(img)){
cout<<"vedio read end!"<<endl;
break;
}
if(!cap.read(img_2)){
cout<<"vedio read end!"<<endl;
break;
}
checkImage(img,img_2);
qApp->processEvents();
}
}
版权声明:本文标题:Qt中设置、打开、捕获、显示网络及本地摄像头的方法 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1727653019a1123640.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论