Advertisement
Guest User

Untitled

a guest
Jan 19th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.10 KB | None | 0 0
  1. #include "opencv2/opencv.hpp"
  2. #include "opencv2/cuda.hpp"
  3. #include "opencv2\cudaarithm.hpp"
  4.  
  5. #include <iostream>
  6.  
  7. using namespace std;
  8. using namespace cv;
  9.  
  10. //TBB need for using this
  11. class Parallel_process : public cv::ParallelLoopBody
  12. {
  13.  
  14. private:
  15. cv::Mat& inImg;
  16. cv::Mat& outImg;
  17. int widhStep;
  18. int m_stride;
  19. cv::Scalar scalar; //B,G,R
  20.  
  21. public:
  22. Parallel_process(cv::Mat& inputImgage, Mat& outImage, Scalar& inScalar)
  23. : inImg(inputImgage), outImg(outImage), scalar(inScalar){
  24.  
  25. widhStep = inputImgage.size().width * 3;
  26. m_stride = inputImgage.size().width * 2;
  27.  
  28.  
  29. }
  30.  
  31. virtual void operator()(const cv::Range& range) const
  32. {
  33. //thread
  34. for (int i = range.start; i < range.end; i++)
  35. {
  36.  
  37. int s1 = i*widhStep;
  38.  
  39. for (int iw = 0; iw< inImg.size().width; iw++)
  40. {
  41. int s2 = iw * 3;
  42. int mc = s1 + s2;
  43.  
  44. unsigned char B1 = (unsigned char)(inImg.data[mc + 0]);
  45. unsigned char G1 = (unsigned char)(inImg.data[mc + 1]);
  46. unsigned char R1 = (unsigned char)(inImg.data[mc + 2]);
  47.  
  48. int B2 = B1 + scalar[0];
  49. int G2 = G1 + scalar[1];
  50. int R2 = R1 + scalar[2];
  51.  
  52. if (B2 > 255)
  53. B2 = 255;
  54. if (G2 > 255)
  55. G2 = 255;
  56. if (R2 > 255)
  57. R2 = 255;
  58.  
  59. if (B2 < 0)
  60. B2 = 0;
  61. if (G2 < 0)
  62. G2 = 0;
  63. if (R2 < 0)
  64. R2 = 0;
  65.  
  66.  
  67. outImg.data[mc + 0] = B2;
  68. outImg.data[mc + 1] = G2;
  69. outImg.data[mc + 2] = R2;
  70.  
  71.  
  72. }
  73. }
  74. }
  75. };
  76.  
  77.  
  78.  
  79.  
  80.  
  81. int main(int, char)
  82. {
  83.  
  84. Mat img = imread("scret.jpg");
  85. Mat img_add;
  86. Mat img_absdiff;
  87. Mat img_subtract;
  88. Mat img_mul;
  89. Mat img_div;
  90. Mat img_parallel;
  91.  
  92. unsigned long AAtime = 0, BBtime = 0; //check processing time
  93.  
  94.  
  95. //cpu add
  96. AAtime = getTickCount();
  97. add(img, Scalar(200, 200, 200), img_add); //Value is between 0 and 255
  98. BBtime = getTickCount();
  99. printf("add cpu %.2lf sec \n", (BBtime - AAtime) / getTickFrequency()); //check processing time
  100.  
  101.  
  102. //cpu subtraction
  103. AAtime = getTickCount();
  104. subtract(img, Scalar(200, 200, 200), img_subtract); //Value is between 0 and 255
  105. BBtime = getTickCount();
  106. printf("subtract %.2lf sec \n", (BBtime - AAtime) / getTickFrequency()); //check processing time
  107.  
  108.  
  109. //cpu absdiff
  110. AAtime = getTickCount();
  111. absdiff(img, Scalar(200, 200, 200), img_absdiff); //Value is between 0 and 255
  112. BBtime = getTickCount();
  113. printf("absdiff %.2lf sec \n", (BBtime - AAtime) / getTickFrequency()); //check processing time
  114.  
  115.  
  116. //cpu *, /
  117. img_mul = img * 20;
  118. img_div = img / 20;
  119.  
  120.  
  121.  
  122.  
  123. cuda::GpuMat gimg;
  124. cuda::GpuMat gout1, gout2;
  125. //gpu add
  126. gimg.upload(img);
  127. cuda::absdiff(gimg, Scalar(10, 2, 100), gout1);
  128. cuda::add(gimg, Scalar(-200, -200, -200), gout2);
  129.  
  130.  
  131. //tbb
  132. AAtime = getTickCount();
  133. img_parallel = Mat(img.size(), img.type());
  134. cv::parallel_for_(cv::Range(0, img.rows), Parallel_process(img, img_parallel, Scalar(-200, -200, -200)));
  135. BBtime = getTickCount();
  136. printf("parallel %.2lf sec \n", (BBtime - AAtime) / getTickFrequency()); //check processing time
  137.  
  138.  
  139. imshow("img", img);
  140. imshow("img_add", img_add);
  141. imshow("img_absdiff", img_absdiff);
  142. imshow("img_subtract", img_subtract);
  143. imshow("img_mul", img_mul);
  144. imshow("img_div", img_div);
  145. imshow("img_parallel", img_parallel);
  146.  
  147.  
  148. waitKey(0);
  149.  
  150.  
  151. return 0;
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement