官术网_书友最值得收藏!

Creating an application for AOI

To create our new application, we require a few input parameters. When a user executes the application, all of them are optional, excluding the input image to process. The input parameters are as follows:

  • Input image to process
  • Light image pattern
  • Light operation, where a user can choose between difference or divide operations
  • If the user sets 0 as a value, the difference operation is applied
  • If the user set 1 as a value, the division operation is applied
  • Segmentation, where the user can choose between connected components with or without statistics and find contour methods
  • If the user sets 1 as the input value, the connected components method for segment is applied
  • If the user sets 2 as the input value, the connected components method with the statistics area is applied
  • If the user sets 3 as the input value, the find contours method is applied for Segmentation

To enable this user selection, we are going to use the command line parser class with the following keys:

// OpenCV command line parser functions 
// Keys accepted by command line parser 
const char* keys = 
{ 
  "{help h usage ? | | print this message}" 
   "{@image || Image to process}" 
   "{@lightPattern || Image light pattern to apply to image input}" 
   "{lightMethod | 1 | Method to remove background light, 0 difference, 1 div }" 
   "{segMethod | 1 | Method to segment: 1 connected Components, 2 connected components with stats, 3 find Contours }" 
}; 

We are going to use the command line parser class in the main function by checking the parameters. The CommandLineParser is explained in Chapter 2, An Introduction to the Basics of OpenCV, in the Reading videos and cameras section:

int main(int argc, const char** argv) 
{ 
  CommandLineParser parser(argc, argv, keys); 
  parser.about("Chapter 5. PhotoTool v1.0.0"); 
  //If requires help show 
  if (parser.has("help")) 
  { 
      parser.printMessage(); 
      return 0; 
  } 
 
  String img_file= parser.get<String>(0); 
  String light_pattern_file= parser.get<String>(1); 
  auto method_light= parser.get<int>("lightMethod"); 
  auto method_seg= parser.get<int>("segMethod"); 
   
  // Check if params are correctly parsed in his variables 
  if (!parser.check()) 
  { 
      parser.printErrors(); 
      return 0; 
  } 

After parsing our command-line user data, we need to check the input image has been loaded correctly. We then load the image and check it has data:

// Load image to process 
  Mat img= imread(img_file, 0); 
  if(img.data==NULL){ 
    cout << "Error loading image "<< img_file << endl; 
    return 0; 
  } 

Now, we are ready to create our AOI process of segmentation. We are going to start with the preprocessing task.

主站蜘蛛池模板: 佛山市| 信宜市| 天水市| 五原县| 巴青县| 樟树市| 新和县| 揭东县| 嘉兴市| 库车县| 合水县| 诏安县| 洛南县| 河曲县| 莱西市| 中山市| 贺兰县| 惠安县| 水城县| 健康| 颍上县| 惠来县| 九龙县| 马关县| 桦甸市| 合江县| 会泽县| 石城县| 项城市| 越西县| 洪湖市| 饶河县| 印江| 乳源| 清河县| 五寨县| 满城县| 灵川县| 五指山市| 罗田县| 德阳市|