⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmvision.h

📁 机器人仿真软件
💻 H
字号:
/*=========================================================================    CMVision.h  -------------------------------------------------------------------------    API definition for the CMVision real time Color Machine Vision library  -------------------------------------------------------------------------    Copyright 1999, 2000         #### ### ### ## ## ## #### ##  ###  ##  ##    James R. Bruce              ##    ####### ## ## ## ##   ## ## ## ######    School of Computer Science  ##    ## # ## ## ## ##  ### ## ## ## ## ###    Carnegie Mellon University   #### ##   ##  ###  ## #### ##  ###  ##  ##  -------------------------------------------------------------------------    This library is free software; you can redistribute it and/or    modify it under the terms of the GNU Lesser General Public    License as published by the Free Software Foundation; either    version 2.1 of the License, or (at your option) any later version.    This library is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU    Lesser General Public License for more details.    You should have received a copy of the GNU Lesser General Public    License along with this library; if not, write to the Free Software    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA  =========================================================================*/#ifndef __CMVISION_H__#define __CMVISION_H__// uncomment if your compiler supports the "restrict" keyword// #define restrict __restrict__#define restrict#include <stdlib.h>#include <string.h>#include <stdio.h>/*Ultra-fast intro to processing steps: - Color segmentation   - load / save   - set new values   - process frame - Connected Regions   - RLE   - merge   - extract blobs   - separate blobs   - sort blobs   - merge blobs - Blob merging (not currently in release)   - merge by area occupiedOptions File Format: (RGB merge name)[Colors](00,00,00) 0.95 'Orange'(00,00,00) 0.00 'Pink'(00,00,00) 0.00 'Red'(00,00,00) 0.00 'DarkBlue'(00,00,00) 0.00 'Blue'[Thresholds](<lo>:<hi>,<lo>:<hi>,<lo>:<hi>)(<lo>:<hi>,<lo>:<hi>,<lo>:<hi>)(<lo>:<hi>,<lo>:<hi>,<lo>:<hi>)*/#define CMV_COLOR_LEVELS  256#define CMV_MAX_COLORS     32// sets tweaked optimal values for image size#define CMV_DEFAULT_WIDTH  320#define CMV_DEFAULT_HEIGHT 240// values may need tweaked, although these seem to work usually#define CMV_MAX_RUNS     (CMV_DEFAULT_WIDTH * CMV_DEFAULT_HEIGHT) / 4#define CMV_MAX_REGIONS  CMV_MAX_RUNS / 4#define CMV_MIN_AREA     20#define CMV_NONE ((unsigned)(-1))#ifndef NULL#define NULL (0)#endifstruct yuv{  unsigned char y,u,v;};struct yuv422{  unsigned char y1,u,y2,v;};struct uyvy{  unsigned char u,y1,v,y2;};#ifdef USE_METEOR  typedef struct uyvy image_pixel;#else  typedef struct yuv422 image_pixel;#endif#ifndef RGB_STRUCT#define RGB_STRUCTstruct rgb{  unsigned char red,green,blue;};#endif// Options for level of processing//   use enable()/disable() to change #define CMV_THRESHOLD      0x01#define CMV_COLOR_AVERAGES 0x02#define CMV_DUAL_THRESHOLD 0x04#define CMV_DENSITY_MERGE  0x08#define CMV_VALID_OPTIONS  0x0Fclass CMVision{public:  struct region{    int color;          // id of the color    int area;           // occupied area in pixels    int x1,y1,x2,y2;    // bounding box (x1,y1) - (x2,y2)    float cen_x,cen_y;  // centroid    yuv average;        // average color (if CMV_COLOR_AVERAGES enabled)    int sum_x,sum_y,sum_z; // temporaries for centroid and avg color    // int area_check; // DEBUG ONLY    region *next;       // next region in list    // int number; // DEBUG ONLY  };  struct rle{    unsigned color;     // which color(s) this run represents    int length;         // the length of the run (in pixels)    int parent;         // run's parent in the connected components tree  };  struct color_info{    rgb color;          // example color (such as used in test output)    char *name;         // color's meaninful name (e.g. ball, goal)    double merge;       // merge density threshold    int expected_num;   // expected number of regions (used for merge)    int y_low,y_high;   // Y,U,V component thresholds    int u_low,u_high;    int v_low,v_high;  };  struct point{    double x,y;  };  struct line{    point a,b;  };  struct rectangle{    int x,y,w,h;  };protected:  unsigned y_class[CMV_COLOR_LEVELS];  unsigned u_class[CMV_COLOR_LEVELS];  unsigned v_class[CMV_COLOR_LEVELS];  region region_table[CMV_MAX_REGIONS];  region *region_list[CMV_MAX_COLORS];  int region_count[CMV_MAX_COLORS];  rle rmap[CMV_MAX_RUNS];  color_info colors[CMV_MAX_COLORS];  int width,height;  unsigned *map;  unsigned options;protected:// Private functions  void classifyFrame(image_pixel * restrict img,unsigned * restrict map);  int  encodeRuns(rle * restrict out,unsigned * restrict map);  void connectComponents(rle * restrict map,int num);  int  extractRegions(region * restrict reg,rle * restrict rmap,int num);  void calcAverageColors(region * restrict reg,int num_reg,                         image_pixel * restrict img,                         rle * restrict rmap,int num_runs);  int  separateRegions(region * restrict reg,int num);  region *sortRegionListByArea(region * restrict list,int passes);  void sortRegions(int max_area);  // density based merging support  int mergeRegions(region *p,int num,double density_thresh);  int mergeRegions();  void clear();public:  CMVision()  {clear();}  ~CMVision() {close();}  bool initialize(int nwidth,int nheight);  bool loadOptions(char *filename);  bool saveOptions(char *filename);  bool enable(unsigned opt);  bool disable(unsigned opt);  void close();  bool testClassify(rgb * restrict out,image_pixel * restrict image);  bool getThreshold(int color,         int &y_low,int &y_high,	 int &u_low,int &u_high,         int &v_low,int &v_high);  bool setThreshold(int color,         int y_low,int y_high,	 int u_low,int u_high,         int v_low,int v_high);  unsigned *getMap()    {return(map);}  char *getColorName(int color)    {return(colors[color].name);}  rgb getColorVisual(int color)    {return(colors[color].color);}  color_info *getColorInfo(int color)    {return(&colors[color]);}  void getColorInfo(int color,color_info &info)    {info = colors[color];}  void setColorInfo(int color,color_info &info)    {colors[color] = info;}  bool processFrame(image_pixel *image);  bool processFrame(unsigned *map);  int numRegions(int color_id);  region *getRegions(int color_id);};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -