Advertisement
arxeiss

EdgeDetector

Feb 9th, 2017
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.36 KB | None | 0 0
  1. int edgeDetector(cv::Mat src) {
  2.     src.convertTo(src, CV_64F, 1.0f / 255);
  3.     cv::imshow("src", src);
  4.     cv::Mat edge = cv::Mat(src.rows, src.cols, CV_64F);
  5.     cv::Mat edgeSobel = cv::Mat(src.rows, src.cols, CV_64F);
  6.     edge = 0.0f;
  7.     edgeSobel = 0.0f;
  8.  
  9.     double xMaskData[9] = { -1.0f, 0, 1.0f, -2.0f, 0, 2.0f,-1.0f, 0, 1.0f };
  10.     cv::Mat xMask = cv::Mat(3, 3, CV_64F, xMaskData);
  11.     double yMaskData[9] = { -1.0f, -2.0f, -1.0f, 0, 0, 0, 1.0f, 2.0f, 1.0f };
  12.     cv::Mat yMask = cv::Mat(3, 3, CV_64F, yMaskData);
  13.  
  14.     std::cout << xMask << std::endl << yMask;
  15.  
  16.     for (int x = 1; x < src.cols - 1; x++)
  17.     {
  18.         for (int y = 1; y < src.rows -1; y++)
  19.         {
  20.             double xVal = (src.at<double>(y, x - 1) - src.at<double>(y, x + 1)) / 2.0f;
  21.             double yVal = (src.at<double>(y - 1, x) - src.at<double>(y + 1, x)) / 2.0f;
  22.             edge.at<double>(y, x) = sqrt(SQR(xVal) + SQR(yVal));
  23.  
  24.             double sXVal = 0.0f;
  25.             double sYVal = 0.0f;
  26.             for (int mX = 0; mX < 3; mX++)
  27.             {
  28.                 for (int mY = 0; mY < 3; mY++)
  29.                 {
  30.                     double cVal = src.at<double>(y - mY + 1, x - mX + 1);
  31.                     sXVal += cVal * xMask.at<double>(mY, mX);
  32.                     sYVal += cVal * yMask.at<double>(mY, mX);
  33.                 }
  34.             }
  35.             sXVal *= 1.0f / 8.0f;
  36.             sYVal *= 1.0f / 8.0f;
  37.  
  38.             edgeSobel.at<double>(y, x) = sqrt(SQR(sXVal) + SQR(sYVal));
  39.         }
  40.     }
  41.  
  42.     cv::imshow("edge", edge);
  43.     cv::imshow("edgeSobel", edgeSobel);
  44.     cv::waitKey();
  45.  
  46.     return 1;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement