Qt C++由于海康摄像头有帧图像宽高颠倒现象而引起的系统崩溃的原因

导致LINUX版车辆视频检测器崩溃的原因:由于使用VPU取帧,帧图像有个高度不正常的现象,在代码 中有裁剪帧图像的操作,由于其中两个摄像头的宽、高颠倒了,比如:宽352 高288,结果成了宽288,高352了,在kernel->dataitem_image.cpp->lzf_saveImage()的部分代码中有裁剪帧图像的代码 ,由于裁剪尺寸超过帧图像的宽度,故引起了崩溃现象。改正确的代码如下,这样就可以容错了。

 qDebug()<<"curframe is not null";
        //此处代码主要解决VPU硬解码得到的图像的高度不正确的问题,强制修改为标准尺寸,裁掉多余的部分
        
        //下面分别对不同尺寸的视频的宽和高都做了判断,原因是有些地方的摄像头的宽和高是反着的,比如:宽:352 高:288,
        //但是有些摄像头却是反着的,所以要进行判断,否则,就会引起系统崩溃,因为裁剪的宽度超过实际帧的宽度就会引起崩溃
        Mat tempimg;
        if(curframe.size().width==1920){
            cv::Rect rect(0, 0, 1920,1080);
            curframe(rect).copyTo(tempimg);
        }else if(curframe.size().width==1080){
            cv::Rect rect(0, 0, 1080,1920);
            curframe(rect).copyTo(tempimg);
        }
        else if(curframe.size().width==1280){
            cv::Rect rect(0, 0, 1280,720);
            curframe(rect).copyTo(tempimg);
        }else if(curframe.size().width==720){
            cv::Rect rect(0, 0, 720,1280);
            curframe(rect).copyTo(tempimg);
        }else if(curframe.size().width==704){
            cv::Rect rect(0, 0, 704,576);
            curframe(rect).copyTo(tempimg);
        }else if(curframe.size().width==576){
            cv::Rect rect(0, 0, 576,704);
            curframe(rect).copyTo(tempimg);
        }else if(curframe.size().width==640){
            cv::Rect rect(0, 0, 640,480);
            curframe(rect).copyTo(tempimg);
        }else if(curframe.size().width==480){
            cv::Rect rect(0, 0, 480,640);
            curframe(rect).copyTo(tempimg);
        }else if(curframe.size().width==288){
            cv::Rect rect(0, 0, 288,352);
            curframe(rect).copyTo(tempimg);
        }else if(curframe.size().width==352){
            cv::Rect rect(0, 0, 352,288);
            curframe(rect).copyTo(tempimg);
        }
        //此处要进行判断,避免系统崩溃
        if(tempimg.size().width>0){
            bool jg1=cv::imwrite("./server/"+imageName+".jpg", tempimg);
            bool jg2=cv::imwrite("./web/server/"+imageName+".jpg", tempimg);
            if(jg1 and jg2)
            {
                return true;
            }else
            {
                return false;
            }
        }else{
            return false;
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值