2016-10-19 3 views
0

Я использую модуль National Instruments Видения в Labwindows \ ХВНОбщая ошибка защиты при использовании NI Vision imaqDetectLines() функция

По какой-то причине, когда я использую FUNC 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. Край filltering его imaqEdgeFilter() FUNC используя Собела

  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); 

 Смежные вопросы

  • Нет связанных вопросов^_^