ERR «Утверждение« img_input.empty () == false »не выполнено» при преобразовании YUV в оттенки серого - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь проверить производительность bgslibrary (алгоритм фонового вычитания в) в моей простой программе.во-первых, конвертируйте YUV422 в оттенки серого, просто извлеките Y-часть из YUV и сохраните ее в памяти серого изображения:

void yuv_to_gray(void *yuv_ptr, void *gray_ptr, size_t size) { //size is YUY2 format bytes used, that is width*height*2
    for (int i = 0; i!= size; i+=2) {
        *(((unsigned char *)gray_ptr)+i/2) = *(((unsigned char *)yuv_ptr)+1+i);
    }
}

, затем я сконструировал типы MAT opencv, которые используются в функции процесса, основной частикод, показанный ниже:

{
    void * gray;
    if ((gray = (void *)malloc(size/2*sizeof(unsigned char)))==NULL){
        cout << "malloc error" << endl;
        return 1;
    }
    memset(gray, 0, size/2*sizeof(unsigned char));
    yuv_to_gray(ptr, gray, size);
    Mat frame_in_gray(height, width, CV_8UC1, gray);
    Mat frame_out(height, width, CV_8UC1);
    Mat frame_bg(height, width, CV_8UC1);
    IBGS *fd;
    fd = new FrameDifference;
    clock_t start = clock();
    fd->process(frame_in_gray, frame_out, frame_bg);
}

запустить программу, ошибка сообщается как:

void bgslibrary :: алгоритмы :: IBGS :: init (const cv :: Mat &, cv:: Mat &, cv :: Mat &): утверждение `img_input.empty () == false 'не выполнено.

В результате ошибки Mat frame_in_gray пуст, но я использую правильную функцию построения,и сделайте свою ссылку на данные * серым указателем.Кто-нибудь может дать предложение?

...