Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<opencv2/opencv.hpp>
- #include<iostream>
- #define FIRST_VARIANT
- //#define SECOND_VARIANT
- using namespace std;
- using namespace cv;
- int main()
- {
- #ifdef FIRST_VARIANT
- Mat img = imread("fon.jpg", 1);
- Mat img1;
- resize(img, img1, Size(1000, 600), 0, 0, 1);
- int count_col = 0;
- int value_row = 0;
- double m = 4 * 3.14 / img1.cols;//константы в формулах для движения синусоиде
- double n = ((double(img1.rows) - 400) / 2 - 1);//
- uchar* p = img1.data;
- while (count_col < img1.cols)
- {
- double angle_rad = m * count_col;
- //double angle_rectangled = atan(n * m * cos(angle_rad));
- value_row = int(200 + n * (sin(angle_rad) + 1));
- RotatedRect rRect = RotatedRect(Point2f(float(count_col), float(value_row)), Size2f(60, 30), float(atan(n * m * cos(angle_rad)) * 180 / 3.14));
- Point2f vertices[4];
- rRect.points(vertices);//возвращает 4 вершины прямоугольника
- for (int i = 0; i < 4; i++)
- line(img1, vertices[i], vertices[(i + 1) % 4], Scalar(255, 255, 0), 6, 2);
- imshow("image", img1);
- waitKey(2);
- if (count_col == 500) imwrite("Screen.jpg", img1);
- for (int i = 0; i < 4; i++)
- line(img1, vertices[i], vertices[(i + 1) % 4], Scalar(255, 255, 255), 6);
- count_col++;
- //if (count_col == 1000) count_col = 0;//зацикливание
- }
- #endif
- //вариант 2 - траектория видна в самом начале
- #ifdef SECOND_VARIANT
- Mat img;
- Mat img1 = imread("fon.jpg", 1);
- resize(img1, img, Size(1000, 600), 0, 0, 1);
- int count_col = 0;
- int value_row = 0;
- double m = 4 * 3.14 / img.cols;
- double n = ((double(img.rows) - 400) / 2 - 1);
- while (count_col < img.cols)
- {
- //double angle_rad = m * count_col;//фаза синуса
- //value_row = int(200 + n * (sin(angle_rad) + 1));//значение строки пикселов
- //circle(img, Point(count_col, int(value_row)), 3, Scalar(255, 255, 255), -1, 8, 0);//траектория
- circle(img, Point(count_col, int(200 + n * (sin(m * count_col) + 1))), 3, Scalar(255, 255, 255), -1, 8, 0);//траектория
- imshow("image", img);
- count_col++;
- }
- imwrite("fon_sine.jpg", img);//сохранения фона с синусом в файл
- waitKey(0);
- Mat img2 = imread("fon_sine.jpg", 1);//открытия фона с синусом из файла
- count_col = 0;
- value_row = 0;
- m = 4 * 3.14 / img2.cols;
- n = ((double(img2.rows) - 400) / 2 - 1);
- while (count_col < img2.cols)
- {
- Mat img2 = imread("fon_sine.jpg", 1);
- double angle_rad = m * count_col;
- //double angle_rectangled = atan(n * m * cos(angle_rad));
- value_row = int(200 + n * (sin(angle_rad) + 1));
- RotatedRect rRect = RotatedRect(Point2f(float(count_col), float(value_row)), Size2f(60, 30), float(atan(n * m * cos(angle_rad)) * 180 / 3.14));//функция поворота прямоугольника
- Point2f vertices[4];//разбиение на линии
- rRect.points(vertices);
- for (int i = 0; i < 4; i++)
- line(img2, vertices[i], vertices[(i + 1) % 4], Scalar(255, 255, 0), 6, 2);
- imshow("image", img2);
- waitKey(1);
- if (count_col == 500) imwrite("Screen2.jpg", img2);//скриншот, когда тележка посередине
- count_col++;
- if (count_col == 1000) count_col = 0;//зацикливание движения
- }
- #endif
- waitKey(0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement