📄 trackapi.cpp
字号:
int largestParticleIndex = 0; success = GetLargestParticle(cameraImage, &largestParticleIndex, rect ); if ( !success ) { errorCode = GetLastVisionError(); DPRINTF (LOG_DEBUG, "Error after GetLargestParticle = %i %s ", errorCode, GetVisionErrorText(errorCode)); frcDispose(__FUNCTION__,cameraImage,histImage,NULL); imaqSetError(ERR_COLOR_NOT_FOUND, __FUNCTION__); return success; } DPRINTF(LOG_INFO, "largestParticleIndex = %i\n", largestParticleIndex); /* Particles were found */ /* * Fill in report information for largest particle found */ success = frcParticleAnalysis(cameraImage, largestParticleIndex, trackReport); trackReport->imageTimestamp = imageTime; /* clean up */ if (!success) {frcDispose(__FUNCTION__,cameraImage,histImage,NULL); return success;} /* particle color statistics */ /* only if a color report requested */ if (colorReport != NULL) { /* first filter out the other particles */ ParticleFilterCriteria2 criteria; ParticleFilterOptions* options = NULL; Rect rect; int numParticles; success = frcParticleFilter(cameraImage, cameraImage, &criteria, 1, options, rect, &numParticles); if ( !success ) { DPRINTF(LOG_INFO, "frcParticleFilter errorCode %i", GetLastVisionError()); } /* histogram the original image using the thresholded image as a mask */ int numClasses = 10; //how many classes? ColorHistogramReport* chrep = imaqColorHistogram2(histImage, numClasses, IMAQ_HSL, NULL, cameraImage); if (chrep == NULL) { DPRINTF(LOG_INFO, "NULL Color Histogram"); errorCode = GetLastVisionError(); } else { colorReport->particleHueMax = chrep->plane1.max; colorReport->particleHueMin = chrep->plane1.min; colorReport->particleHueMean = chrep->plane1.mean; colorReport->particleSatMax = chrep->plane2.max; colorReport->particleSatMin = chrep->plane2.min; colorReport->particleSatMean = chrep->plane2.mean; colorReport->particleLumMax = chrep->plane3.max; colorReport->particleLumMin = chrep->plane3.min; colorReport->particleLumMean = chrep->plane3.mean; colorReport->numberParticlesFound = numParticles; frcDispose(chrep); } } /* clean up */ frcDispose(__FUNCTION__,cameraImage,histImage,NULL); return success; }/** * Data functions for tracking *//** * @brief Get default HSL tracking parameters * Note these parameters are not fully characterized at this point * Get these default values and modify them as needed for your environment * @param hue tasked color * @param light saturation/luminance */TrackingThreshold GetTrackingData(FrcHue hue, FrcLight light){ TrackingThreshold trackingData; //set saturation & luminance switch (light) { default: case FLUORESCENT: trackingData.saturation.minValue = 100; trackingData.saturation.maxValue = 255; trackingData.luminance.minValue = 40; trackingData.luminance.maxValue = 255; if (hue == GREEN) trackingData.luminance.minValue = 100; if (hue == PINK) trackingData.saturation.minValue = 80; if (hue == PINK) trackingData.luminance.minValue = 60; if (hue == PINK) trackingData.luminance.maxValue = 155; break; case PASSIVE_LIGHT: trackingData.saturation.minValue = 50; trackingData.saturation.maxValue = 255; trackingData.luminance.minValue = 20; trackingData.luminance.maxValue = 255; break; case BRIGHT_LIGHT: trackingData.saturation.minValue = 0; trackingData.saturation.maxValue = 100; trackingData.luminance.minValue = 100; trackingData.luminance.maxValue = 255; break; case ACTIVE_LIGHT: trackingData.saturation.minValue = 0; trackingData.saturation.maxValue = 50; trackingData.luminance.minValue = 150; trackingData.luminance.maxValue = 255; break; case WHITE_LIGHT: trackingData.saturation.minValue = 0; trackingData.saturation.maxValue = 20; trackingData.luminance.minValue = 200; trackingData.luminance.maxValue = 255; break; } //set hue switch (hue){ default: case WHITE: strcpy (trackingData.name, "WHITE"); trackingData.hue.minValue = 0; trackingData.hue.maxValue = 255; break; case ORANGE: strcpy (trackingData.name, "ORANGE"); trackingData.hue.minValue = 5; trackingData.hue.maxValue = 25; break; case YELLOW: strcpy (trackingData.name, "YELLOW"); trackingData.hue.minValue = 30; trackingData.hue.maxValue = 50; break; case GREEN: strcpy (trackingData.name, "GREEN"); if (light == FLUORESCENT) { trackingData.hue.minValue = 60; trackingData.hue.maxValue = 110; } else { trackingData.hue.minValue = 90; trackingData.hue.maxValue = 125; } break; case BLUE: strcpy (trackingData.name, "BLUE"); trackingData.hue.minValue = 140; trackingData.hue.maxValue = 170; break; case PURPLE: strcpy (trackingData.name, "PURPLE"); trackingData.hue.minValue = 180; trackingData.hue.maxValue = 200; break; case PINK: strcpy (trackingData.name, "PINK"); trackingData.hue.minValue = 210; trackingData.hue.maxValue = 250; break; case RED: strcpy (trackingData.name, "RED"); trackingData.hue.minValue = 240; trackingData.hue.maxValue = 255; break; } return(trackingData);}/** * Print particle analysis report * @param myReport Report to print */void PrintReport(ParticleAnalysisReport* myReport){ dprintf(LOG_INFO, "particle analysis:\n %s%i %s%i\n %s%lf\n %s%i %s%i\n %s%g %s%g\n %s%g\n %s%i %s%i\n %s%i %s%i\n", "imageHeight = ", myReport->imageHeight, "imageWidth = ", myReport->imageWidth, "imageTimestamp = ", myReport->imageTimestamp, "center_mass_x = ", myReport->center_mass_x, "center_mass_y = ", myReport->center_mass_y, "center_mass_x_normalized = ", myReport->center_mass_x_normalized, "center_mass_y_normalized = ", myReport->center_mass_y_normalized, "particleArea = ", myReport->particleArea, "boundingRectangleTop = ", myReport->boundingRect.top, "boundingRectangleLeft = ", myReport->boundingRect.left, "boundingRectangleHeight = ", myReport->boundingRect.height, "boundingRectangleWidth = ", myReport->boundingRect.width); dprintf(LOG_INFO, "quality statistics: \n %s%g %s%g \n", "particleToImagePercent = ", myReport->particleToImagePercent, "particleQuality = ", myReport->particleQuality);}/** * Print color report * @param myReport Report to print */void PrintReport(ColorReport* myReport){ dprintf(LOG_INFO, "particle ranges for %i particles: ", "numberParticlesFound = ", myReport->numberParticlesFound); ; dprintf(LOG_INFO, "\n %s%f %s%f %s%f\n %s%f %s%f %s%f\n %s%f %s%f %s%f\n -------", "particleHueMax = ", myReport->particleHueMax, "particleHueMin = ", myReport->particleHueMin, "particleHueMean = ", myReport->particleHueMean, "particleSatMax = ", myReport->particleSatMax, "particleSatMin = ", myReport->particleSatMin, "particleSatMean = ", myReport->particleSatMean, "particleLumMax = ", myReport->particleLumMax, "particleLumMin = ", myReport->particleLumMin, "particleLumMean = ", myReport->particleLumMean);}/** * Print color report * @param myReport Report to print */void PrintReport(TrackingThreshold* myReport){ dprintf(LOG_INFO, "name of color: %s", myReport->name); dprintf(LOG_INFO, "\n %s%i %s%i\n %s%i %s%i\n %s%i %s%i\n -------", "hueMin = ", myReport->hue.minValue, "hueMax = ", myReport->hue.maxValue, "satMin = ", myReport->saturation.minValue, "satMax = ", myReport->saturation.maxValue, "lumMin = ", myReport->luminance.minValue, "lumMax = ", myReport->luminance.maxValue );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -