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

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.

主站蜘蛛池模板: 革吉县| 宁河县| 大洼县| 福安市| 贵德县| 安龙县| 沾化县| 连城县| 镇康县| 池州市| 若羌县| 揭东县| 寿阳县| 桐乡市| 泸溪县| 乡宁县| 沂源县| 酒泉市| 岳阳县| 漳平市| 吉木乃县| 南靖县| 平江县| 隆回县| 平武县| 卢龙县| 沂源县| 永嘉县| 罗城| 彰武县| 稷山县| 河西区| 新巴尔虎左旗| 威远县| 乌兰察布市| 杨浦区| 五家渠市| 黔南| 贵阳市| 个旧市| 镇赉县|