Skip to content

klaokai/OpenCVCarTrack

Repository files navigation

OpenCVCarTrack


2016/4/1 14:36:40

  1. 发现BUG,QT无法显示单通道图像: 经调查发现,是Mat转换QImage格式时,转换方式不正确。更改代码如下:
QImage VideoInfo::Mat2QImage(Mat &image)
{
    QImage img;

    if (image.channels()==3) {
        //3通道
        cvtColor(image, image, CV_BGR2RGB);
        img = QImage((const unsigned char *)(image.data), image.cols, image.rows,
                     image.cols*image.channels(), QImage::Format_RGB888);
    } else if (image.channels()==1) {
        //单通道
        img = QImage((const unsigned char *)(image.data), image.cols, image.rows,
                     image.cols*image.channels(), QImage::Format_Indexed8);
    } else {
        img = QImage((const unsigned char *)(image.data), image.cols, image.rows,
                     image.cols*image.channels(), QImage::Format_RGB888);
    }

    return img;
}

2016/3/28 16:54:26

  1. 发现BUG,错误信息如下:

    OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat, file D:\opencv\sources\modules\core\src\array.cpp, line 2482

    Invalid parameter passed to C runtime function.

    Invalid parameter passed to C runtime function.

    Error - RtlWerpReportException failed with status code :-1073741823. Will try to launch the process directly

    terminate called after throwing an instance of 'cv::Exception'

    what(): D:\opencv\sources\modules\core\src\array.cpp: 2482: error: (-206) Unrecognized or unsupported array type in function cvGetMat

    解决方案: 一开始以为是跟踪识别模块出了问题,但是后来发现其实是视频读取模块也有问题。 主要是Mat结构处理的时候为空,导致后续检测的时候程序对NULL的Mat结构无法处理,进而产生错误。 故而加入了数据检查来规避错误的发生

  2. 发现视频总帧数和实际能处理的帧数不一致

示例1

1446帧结果图1 1446帧结果图2

示例2

13731帧结果图1 13731帧结果图2

这里我感到有些奇怪,可以发现第一个示例中1446帧只能读取出905帧,第二个示例中13731帧只能读取8592帧。其实,经计算发现能读取的约占总帧数的62.5%。

\begin{equation}
\frac{905}{1446} \approx 0.6258644536652835\label{ref1}
\end{equation}
\begin{equation}
\frac{8592}{13731} \approx 0.6257373825649989\label{ref2}
\end{equation}

于是下载了视频播放器Potplayer来逐帧播放,发现即使是播放器也不是一帧一帧播放的,它有时候会跳过某一帧直接播放下一帧。而且有一定规律。 规律是12122,即首先会播放下一帧,其次跳过一帧播放,再次播放下一帧、从次跳过一帧播放,最后跳过一帧播放,如此循环将整个视频播放完。 故而这里不算是BUG,只是该格式是如此解码。 但是令我不安的是帧的不连续会导致图像抖动增大,减少我检测的精确度。这里我还需要很多改进。

About

using with QT

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published