通过MPI_Send

因此,我已将图像划分为cv::Mat类型的四个象限,并希望将它们通过MPI_Send,我该如何处理?这是我当前的代码:

void parallel(cv::Mat img){
  int id;
  int ierr;
  int p;

  ierr = MPI_Init ( NULL,NULL );   //  Initialize MPI.

  if ( ierr != 0 )
  {
    cout << "\n";
    cout << "MPI - Fatal error!\n";
    cout << "  MPI_Init returned nonzero ierr.\n";
    exit ( 1 );
  }
  ierr = MPI_Comm_size ( MPI_COMM_WORLD,&p ); //  Get the number of processes.

  ierr = MPI_Comm_rank ( MPI_COMM_WORLD,&id ); //  Get the individual process ID.


  if (id == 0){
    cv::Mat top_left
   = img(cv::Range(0,img.rows / 2 - 1),cv::Range(0,img.cols / 2 - 1));
    cv::Mat top_right
   = img(cv::Range(0,cv::Range(img.cols / 2,img.cols - 1));
    cv::Mat bottom_left
   = img(cv::Range(img.rows / 2,img.rows - 1),img.cols / 2 - 1));
    cv::Mat bottom_right
   = img(cv::Range(img.rows / 2,img.cols - 1));

   MPI_Send(top_left,1,MPI_INT,MPI_COMM_WORLD);
   MPI_Send(top_right,2,MPI_COMM_WORLD);
   MPI_Send(bottom_left,3,MPI_COMM_WORLD);
   MPI_Send(bottom_right,4,MPI_COMM_WORLD);

由于MPI_Send行是矩阵而不是int,显然MPI_Send行是错误的,我该如何解决?

我为信息起见尝试跑步,这是错误之一:

main.cpp:43:59: error: cannot convert ‘cv::Mat’ to ‘const void*’ for argument ‘1’ to ‘int MPI_Send(const void*,int,MPI_Datatype,MPI_Comm)’
    MPI_Send(bottom_right,MPI_COMM_WORLD);
wzqzl 回答:通过MPI_Send

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3111286.html

大家都在问