Advertisement
Guest User

Untitled

a guest
Sep 19th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.38 KB | None | 0 0
  1. #include<opencv2/opencv.hpp>
  2. #include<iostream>
  3. #define FIRST_VARIANT
  4. //#define SECOND_VARIANT
  5. using namespace std;
  6. using namespace cv;
  7.  
  8. int main()
  9. {
  10. #ifdef FIRST_VARIANT
  11.     Mat img = imread("fon.jpg", 1);
  12.     Mat img1;
  13.     resize(img, img1, Size(1000, 600), 0, 0, 1);
  14.     int count_col = 0;
  15.     int value_row = 0;
  16.     double m = 4 * 3.14 / img1.cols;//константы в формулах для движения синусоиде
  17.     double n = ((double(img1.rows) - 400) / 2 - 1);//
  18.     uchar* p = img1.data;
  19.     while (count_col < img1.cols)
  20.     {
  21.         double angle_rad = m * count_col;
  22.         //double angle_rectangled = atan(n * m * cos(angle_rad));
  23.         value_row = int(200 + n * (sin(angle_rad) + 1));
  24.  
  25.         RotatedRect rRect = RotatedRect(Point2f(float(count_col), float(value_row)), Size2f(60, 30), float(atan(n * m * cos(angle_rad)) * 180 / 3.14));
  26.         Point2f vertices[4];
  27.         rRect.points(vertices);//возвращает 4 вершины прямоугольника
  28.         for (int i = 0; i < 4; i++)
  29.             line(img1, vertices[i], vertices[(i + 1) % 4], Scalar(255, 255, 0), 6, 2);
  30.  
  31.         imshow("image", img1);
  32.         waitKey(2);
  33.  
  34.         if (count_col == 500) imwrite("Screen.jpg", img1);
  35.  
  36.         for (int i = 0; i < 4; i++)
  37.             line(img1, vertices[i], vertices[(i + 1) % 4], Scalar(255, 255, 255), 6);
  38.  
  39.         count_col++;
  40.         //if (count_col == 1000) count_col = 0;//зацикливание
  41.     }
  42. #endif
  43.     //вариант 2 - траектория видна в самом начале
  44. #ifdef SECOND_VARIANT
  45.     Mat img;
  46.     Mat img1 = imread("fon.jpg", 1);
  47.     resize(img1, img, Size(1000, 600), 0, 0, 1);
  48.     int count_col = 0;
  49.     int value_row = 0;
  50.     double m = 4 * 3.14 / img.cols;
  51.     double n = ((double(img.rows) - 400) / 2 - 1);
  52.     while (count_col < img.cols)
  53.     {
  54.         //double angle_rad = m * count_col;//фаза синуса
  55.         //value_row = int(200 + n * (sin(angle_rad) + 1));//значение строки пикселов
  56.         //circle(img, Point(count_col, int(value_row)), 3, Scalar(255, 255, 255), -1, 8, 0);//траектория
  57.         circle(img, Point(count_col, int(200 + n * (sin(m * count_col) + 1))), 3, Scalar(255, 255, 255), -1, 8, 0);//траектория
  58.         imshow("image", img);
  59.         count_col++;
  60.     }
  61.     imwrite("fon_sine.jpg", img);//сохранения фона с синусом в файл
  62.  
  63.     waitKey(0);
  64.  
  65.     Mat img2 = imread("fon_sine.jpg", 1);//открытия фона с синусом из файла
  66.     count_col = 0;
  67.     value_row = 0;
  68.     m = 4 * 3.14 / img2.cols;
  69.     n = ((double(img2.rows) - 400) / 2 - 1);
  70.     while (count_col < img2.cols)
  71.     {
  72.         Mat img2 = imread("fon_sine.jpg", 1);
  73.         double angle_rad = m * count_col;
  74.         //double angle_rectangled = atan(n * m * cos(angle_rad));
  75.         value_row = int(200 + n * (sin(angle_rad) + 1));
  76.  
  77.         RotatedRect rRect = RotatedRect(Point2f(float(count_col), float(value_row)), Size2f(60, 30), float(atan(n * m * cos(angle_rad)) * 180 / 3.14));//функция поворота прямоугольника
  78.         Point2f vertices[4];//разбиение на линии
  79.         rRect.points(vertices);
  80.         for (int i = 0; i < 4; i++)
  81.             line(img2, vertices[i], vertices[(i + 1) % 4], Scalar(255, 255, 0), 6, 2);
  82.  
  83.  
  84.         imshow("image", img2);
  85.         waitKey(1);
  86.  
  87.         if (count_col == 500) imwrite("Screen2.jpg", img2);//скриншот, когда тележка посередине
  88.  
  89.         count_col++;
  90.         if (count_col == 1000) count_col = 0;//зацикливание движения
  91.  
  92.     }
  93. #endif
  94.     waitKey(0);
  95.  
  96.     return 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement