<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      opencv的并行操作parallel_for_的問題

      第一次運行時,并行計算會比普通計算要快很多,如圖1所示。可是第二次運行,兩種方式所用時間基本差不多,有高手能指點下嗎?

      這段程序我是參考了下面這篇文章:

      OpenCV并行加速Parallel_for_與ParallelLoopBody教程_void operator()(const range& range)-CSDN博客

       

      #include <iostream>
      #include<opencv2/opencv.hpp>
      #include<opencv2/core/utility.hpp>
      
      using namespace cv;
      using namespace std;
      
      class PllMul:public ParallelLoopBody//并行計算類
      {
      public:
          PllMul(const Mat& _src1,const Mat&_src2,Mat& _result)
          {
              int cn=_src1.channels();
              _src1.convertTo(src1,CV_32FC(cn));
              _src2.convertTo(src2,CV_32FC(cn));
              _result.convertTo(result,CV_32FC(cn));
      
              CV_Assert(src1.channels()==src2.channels()
                        &&src1.rows==src2.rows
                        &&src1.cols==src2.cols);
              rows=src1.rows;
              cols=src1.cols;
          }
          void operator()(const Range&range)const //重載括號()運算符
          {
              int totalPixs=range.end-range.start;
              float *presult=(float*)(result.data);
              float *ps1    =(float*)(src1.data);
              float *ps2    =(float*)(src2.data);
              int cn=src1.channels();
              for(int i=0;i<totalPixs;i++)
              {
                  for(int k=0;k<cn;k++)
                      presult[k]=ps1[k]*ps2[k];
      
                  presult+=cn;
                  ps1    +=cn;
                  ps2    +=cn;
              }
          }
          Mat result;//為了方便測試,設為了共有成員
      private:
          Mat src1;
          Mat src2;
          int rows;
          int cols;
      };
      class MyMul             //普通計算類
      {
      public:
          MyMul(const Mat& _src1,const Mat&_src2,Mat& _result)
          {
              int cn=_src1.channels();
              _src1.convertTo(src1,CV_32FC(cn));
              _src2.convertTo(src2,CV_32FC(cn));
              _result.convertTo(result,CV_32FC(cn));
      
              CV_Assert(src1.channels()==src2.channels()
                        &&src1.rows==src2.rows
                        &&src1.cols==src2.cols);
              rows=src1.rows;
              cols=src1.cols;
      
          }
          void operator()(const Range&range)const //重載括號()運算符
          {
              int totalPixs=range.end-range.start;
              float *presult=(float*)(result.data);
              float *ps1    =(float*)(src1.data);
              float *ps2    =(float*)(src2.data);
              int cn=src1.channels();
              for(int i=0;i<totalPixs;i++)
              {
                  for(int k=0;k<cn;k++)
                      presult[k]=ps1[k]*ps2[k];
      
                  presult+=cn;
                  ps1    +=cn;
                  ps2    +=cn;
              }
          }
          
          Mat result;//為了方便測試,設為了共有成員
      private:
          Mat src1;
          Mat src2;
          int rows;
          int cols;
      };
      void testMllWithoutParallel(Mat &s1,Mat&s2,Mat&result1)//普通計算模式測試
      {
          result1=Mat(s1.size(),s1.type(),Scalar::all(0));
          PllMul mul(s1,s2,result1);
          mul(Range(0,s1.rows*s1.cols));//調用括號()運算符函數
          cout<<"OK!"<<endl;
      }
      void testPllMllWithParallel(Mat&s1,Mat&s2,Mat&result)//并行計算模式測試
      {
          result=Mat(s1.size(),s1.type(),Scalar::all(0));
      //    PllMul mul();
          cv::parallel_for_(Range(0,s1.rows*s1.cols),PllMul(s1,s2,result));//隱式調用括號()運算符函數
          cout<<endl<<"OK!"<<endl;
      }
      int main()
      {
          Mat s1(1000,1000,CV_8UC3),s2(1000,1000,CV_8UC3);
          Mat result1,result2;
          randu(s1,0,10);randu(s2,0,10);
          clock_t start,stop;
      
          start=clock();
          testMllWithoutParallel(s1,s2,result1);
          stop=clock();
          cout<<"Running time using \'parallel for \':" << (double)(stop - start) / CLOCKS_PER_SEC * 1000 << "ms" << endl;
      
          start=clock();
          testPllMllWithParallel(s1,s2,result2);
          stop=clock();
          cout << "Running time using \'common call function \':" << (double)(stop - start) / CLOCKS_PER_SEC * 1000 << "ms" << endl;
      
          return 0;
      }

             圖1. 第一次運行結果

       圖2. 第二次運行結果

      posted @ 2024-06-19 06:20  鳳凰_1  閱讀(155)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 全免费A级毛片免费看无码| 妓女妓女一区二区三区在线观看| 日日碰狠狠添天天爽五月婷 | 国产激情免费视频在线观看| 日韩精品亚洲精品第一页| 精品国产女同疯狂摩擦2| 亚洲一区二区中文字幕| 国产偷人爽久久久久久老妇app| 欧美牲交a欧美牲交aⅴ免费真| 放荡的少妇2欧美版| 91精品国产麻豆国产自产| 亚洲天堂在线观看完整版| 国产精品色呦呦在线观看| 国产精品午夜福利精品| 国产四虎永久免费观看| 久久九九久精品国产免费直播| 久久亚洲精精品中文字幕| 亚在线观看免费视频入口| 欧美成人一卡二卡三卡四卡| 临安市| 国产精品自拍实拍在线看| 福利视频在线一区二区| 永吉县| 天堂mv在线mv免费mv香蕉| 国产欧美日韩精品第二区| 日韩人妻无码精品久久久不卡| 国精偷拍一区二区三区| 丁香五月亚洲综合在线| 国产乱码精品一区二区麻豆| 亚洲综合日韩av在线| 91福利一区福利二区| 婷婷五月综合激情| 欧美精品在线观看视频| 国产免费无遮挡吸奶头视频| 亚洲中文字幕精品一区二区三区| av色国产色拍| 日本一卡2卡3卡四卡精品网站| 日韩人妻无码精品久久久不卡| 国产精品三级爽片免费看| 国产无遮挡又黄又爽高潮 | 国产黄色一区二区三区四区|