Ошибка общей защиты при использовании функции NI VISION imaqDetectLines()

Я использую модуль National Instruments Vision в Labwindows\CVI

Почему-то, когда я использую функцию imaqDetectLines(), я получил FATAL RUN-TIME ERROR: "Angle tracker.c", line 50, col 11, thread id 0x00002004: The program has caused a 'General Protection' fault at 0x6C5AD446.

Это мой код:

#include "nivision.h"
#include <userint.h>
#include <cvirte.h>

int main (int argc, char *argv[])
{
    int nLines;
    ShapeDetectionOptions stShapeDetectionOption;
    RangeFloat aAngleRanges[2]={{0,10.0},{10.0,20.0}};
    CurveOptions stCurveOptions = {0};
    LineMatch *aLm;
    LineDescriptor lineDesc;
    Image *imageHdl = NULL, *imageDestHdl = NULL;
    char temp[1024] ="";

    if (InitCVIRTE (0, argv, 0) == 0)
        return -1;    /* out of memory */

    imageHdl = imaqCreateImage (0/*U8*/,1); 
    imageDestHdl = imaqCreateImage (0/*U8*/,1); 

    strcpy(temp,"C:\\CVI2013\\Projects\\Angel Tracker\\IMG\\CC01.bmp");

    imaqReadFile (imageHdl, temp, NULL, NULL);

    imaqEdgeFilter (imageDestHdl, imageHdl, IMAQ_EDGE_SOBEL, NULL);

    lineDesc.maxLength = 100;
    lineDesc.minLength = 50;

    stShapeDetectionOption.minMatchScore = 1;
    stShapeDetectionOption.mode = 0;
    stShapeDetectionOption.numAngleRanges = 1;
    stShapeDetectionOption.angleRanges = aAngleRanges;
    stShapeDetectionOption.scaleRange.minValue = 1;
    stShapeDetectionOption.scaleRange.maxValue = 10;

    stCurveOptions.extractionMode = 0;
    stCurveOptions.threshold = 100;
    stCurveOptions.filterSize = 1;
    stCurveOptions.minLength = 100;
    stCurveOptions.rowStepSize = 10;
    stCurveOptions.columnStepSize = 10;
    stCurveOptions.maxEndPointGap = 1000;
    stCurveOptions.onlyClosed = TRUE;
    stCurveOptions.subpixelAccuracy = TRUE;

    aLm = imaqDetectLines(imageDestHdl, &lineDesc, &stCurveOptions
                           ,&stShapeDetectionOption, NULL, &nLines);

    return 0;
}

что я на самом деле делаю, это:

  1. Откройте файл BMP

  2. Край заполняя это imaqEdgeFilter() Функ с использованием SOBEL

  3. Тогда я хочу обнаружить строки с imaqDetectLines() FUNC

1 ответ

Решение

Я нашел проблему.

если вы посмотрите на вызов функции:

aLm = imaqDetectLines(imageDestHdl, &lineDesc, &stCurveOptions
                       ,&stShapeDetectionOption, NULL, &nLines);   

Для параметра ROI я передал NULL, потому что я получил это из справки панели функций:

Область интереса применяется к изображению, которое указывает, где круги могут быть обнаружены. Установите для этого параметра значение NULL для поиска по всему изображению.

Но, по-видимому, это известная ошибка, и она будет исправлена, поэтому для ее обхода просто сделайте следующее:

ROI *roi;    
imaqSetWindowROI (0, NULL);    
roi = imaqGetWindowROI (0);  

А затем отправьте его в функцию:

aLm = imaqDetectLines(imageDestHdl, &lineDesc, &stCurveOptions
                       ,&stShapeDetectionOption, roi, &nLines);  
Другие вопросы по тегам