Advertisement
Guest User

Untitled

a guest
May 13th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. - (void)update:(SolarMasksCameraParameters *)pParametersArg {
  3.     self.pCameraParameters = pParametersArg;
  4.  
  5.     [self initMaskMatrix];
  6.  
  7.     //original
  8.     NSString *pictureOriginalPath = [pParametersArg.pictureOriginalUrl path];
  9.     std::string srcOriginal = [self convertToCPPString:pictureOriginalPath];
  10.  
  11.  
  12.     //subsample
  13.     NSString *pictureSubsampledPath = [pParametersArg.pictureSubsampledUrl path];
  14.     std::string srcSubsampled = [self convertToCPPString:pictureSubsampledPath];
  15.  
  16.     //on converti la picture source en matrix
  17.     cv::Mat matSRC = cv::imdecode(
  18.             cv::Mat(1,
  19.                     (int) [[pParametersArg picture] length],
  20.                     CV_32F,
  21.                     (void *) [pParametersArg picture].bytes
  22.             ),
  23.             cv::IMREAD_COLOR
  24.     );
  25.  
  26.     //on retire une bordure de 30 pixel tout autour pour le pblm de l'iPhone 8
  27.     cv::Mat M_subsampled = matSRC.colRange(30, matSRC.cols - 30).rowRange(30, matSRC.rows - 30).clone();
  28.  
  29.     //on enregistre l'image originale croppée
  30.     cv::imwrite(srcOriginal, M_subsampled);
  31.  
  32.     //on susample l'image
  33.     M_subsampled.convertTo(M_subsampled, CV_32F);
  34.     M_subsampled = skydetect::subsample_img(M_subsampled, 256, 0);
  35.     cv::imwrite(srcSubsampled, M_subsampled);
  36.  
  37.  
  38.     //Execute algo
  39.     cv::Mat M_algo3 = skydetect::skydetect_algo3(srcOriginal);
  40.  
  41.     NSString *pictureSDPath = [pParametersArg.pictureSDUrl path];
  42.     std::string srcSD = [self convertToCPPString:pictureSDPath];
  43.     mSDMatrix = M_algo3.colRange(1, M_algo3.cols).rowRange(1, M_algo3.rows - 10).clone();
  44.     cv::imwrite(srcSD, mSDMatrix);
  45.  
  46.     //Extend mask picture to unknow areas, and write SDEMatrix as a .jpg file
  47.     [self extendMaskPicture];
  48.  
  49.     NSString *pictureSDEPath = [pParametersArg.pictureSDEUrl path];
  50.     std::string srcSDE = [self convertToCPPString:pictureSDEPath];
  51.     cv::imwrite(srcSDE, mSDEMatrix);
  52.  
  53.  
  54.     //Add sky detection matrix to mask matrix
  55.     [self addSkyDetectionMatrixToMaskMatrix];
  56.  
  57.  
  58.  
  59.     //Save mask matrix as a .jpg file
  60.     const int iRows = (int) [mMaskMatrix count];
  61.     const int iColumns = (int) [[mMaskMatrix objectAtIndex:0] count];
  62.     cv::Mat img = cv::Mat(iRows, iColumns, CV_32F);
  63.     for (int iColumn = 0; iColumn < iColumns; ++iColumn) {
  64.  
  65.         for (int iRow = 0; iRow < iRows; ++iRow) {
  66.             cv::Point point(iColumn, iRow);
  67.             NSNumber *ok = [[mMaskMatrix objectAtIndex:iRow] objectAtIndex:iColumn];
  68.  
  69.             if (![ok boolValue]) {
  70.                 cv::circle(img, point, 1, cv::Scalar(0, 0, 0), 1, 8, 0);
  71.             } else {
  72.                 cv::circle(img, point, 1, cv::Scalar(255, 255, 255), 1, 8, 0);
  73.             }
  74.         }
  75.     }
  76.  
  77.     NSString *pictureMaskMatrixPath = [pParametersArg.pictureMaskMatrixUrl path];
  78.     std::string srcMaskMatrix = [self convertToCPPString:pictureMaskMatrixPath];
  79.     cv::imwrite(srcMaskMatrix, img);
  80.  
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement