Ошибка общей защиты при использовании функции 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;
}
что я на самом деле делаю, это:
Откройте файл BMP
Край заполняя это
imaqEdgeFilter()
Функ с использованием SOBELТогда я хочу обнаружить строки с
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);