Форум программистов, компьютерный форум, киберфорум
Python: Научные вычисления
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 04.04.2020
Сообщений: 15
1

Переписать программу, которая написана на С++, на язык Python

02.01.2021, 00:13. Просмотров 2107. Ответов 3

Привет, есть программа на C++ необходимо переписать ее на Python. Если нужны есть более подробные комментарии для программы. Заранее спасибо.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// Подключаем библиотеку OpenCV
#include <opencv2/opencv.hpp>
// Подключаем библиотеку для вывода текста в консоль
#include <iostream>
 
// Пространства имён
using namespace cv;
using namespace std;
 
// Функция возвращает красную компоненту пикселя с координатами "c" на изображение "frame"
int red_с(Mat frame, Point c) {
    // Получаем цвет пикселя
    Vec3b point = frame.at<Vec3b>(c);
    // Возвращаем красную компоненту
    return point[2];
}
 
int main() {
    // Номер строки изображения, на которой будет происходить распознавание чёрной линии
    int scan_row = 470;
    // X координата правого края чёрной линии
    int center = -1;
 
    // Класс "Mat" представляет собой n-мерный числовой массив
    Mat frame;
    // VideoCapture - это класс для захвата видео из видеофайлов или камер
    VideoCapture cap("../../../black_line.avi");
    // Метод "isOpened()" возвращает true, если камера или видеофайл были открыты
    if(!cap.isOpened()) {   
        // Выводим сообщение о том, что камера не открылась
        cout << "Unable to open video source" << endl;
        return 1;
    }
    // Устанавливаем высоту кадров, которые будем считывать с веб-камеры
    cap.set(cv::CAP_PROP_FRAME_WIDTH, 640);
    // Устанавливаем высоту кадров, которые будем считывать с веб-камеры
    cap.set(cv::CAP_PROP_FRAME_HEIGHT, 480);
 
    while(true) {
        // Ждем нового кадра от камеры и сохраняем его в "frame"
        cap.read(frame);
        // Метод "empty()" возвращает true, если в массиве "Mat" нет элементов.
        if(frame.empty()) 
            // Если нет, то возвращаемся в начало цикла
            continue;
 
        // Предполагаем, то что правый край чёрной линии находится в этой x координате
        int x = 350;
        // Идём до начала изображения, пока не найдём чёрный пиксель
        // Чёрным пикселем считается, тот пиксель у которого красная компонента меньше 40
        for(; x > 0; x--){
            if(red_с(frame, Point(x, scan_row)) < 60)
                break;
        }
        // Устанавливаем x координату правого края чёрной линии
        center = x;
 
        // Рисуем линию
        line(frame, Point(center, frame.rows), Point(center, frame.rows - 40), Scalar(255, 0, 0), 2);
 
        // Показываем новый кадр
        imshow("frame", frame);
        if(waitKey(5) >= 0) 
            break;
    }
    // Завершаем программу
    return 0;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.01.2021, 00:13
Ответы с готовыми решениями:

Переписать программу, которая написана на С++ на язык Python
Привет, есть программа на C++ необходимо переписать ее на Python. Если нужны есть более подробные...

Переписать функцию с Python на язык C#
Помогите метод переписать на C# этот: import requests from urllib.parse import urljoin from...

Переписать функцию с Python на язык C# / C# .NET
Помогите метод переписать на C# этот: import requests from urllib.parse import urljoin from...

из формы нажатием кнопки вызвать программу которая написана в консоли
Можно ли из формы нажатием кнопки вызвать программу которая написана в консоли?

3
869 / 583 / 160
Регистрация: 07.11.2019
Сообщений: 1,345
02.01.2021, 09:11 2
Как звучит общая постановка задачи? black_line.avi где взять?
1
0 / 0 / 0
Регистрация: 04.04.2020
Сообщений: 15
02.01.2021, 16:54  [ТС] 3
Цитата Сообщение от u235 Посмотреть сообщение
Как звучит общая постановка задачи? black_line.avi где взять?
Общая задача: Обнаружение черной линии с видеопотока камеры, которая расположена на борту машинки. Первая часть программы, отвечает за чтение видеопотока с веб-камеры, а вторая часть непосредственнно за обнаружение черной линии на изображении. black_line.avi можно найти по данной ссылке: https://hdd.tomsk.ru/desk/pougmdha#
Ниже представлена та же программа с более подробными комментариями:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
 // Команды для сборки и запуска программы:
//  mkdir build && cd build
//  cmake .. && make
//  ./main
// Для остановки программы нажмите сочетание клавиш Ctrl+C
 
// Подключаем библиотеку OpenCV
#include <opencv2/opencv.hpp>
// Подключаем библиотеку для вывода текста в консоль
#include <iostream>
 
// Пространства имён
using namespace cv;
using namespace std;
 
// Функция возвращает красную компоненту пикселя с координатами "c" на изображение "frame"
int red_с(Mat frame, Point c) {
    // Получаем цвет пикселя
    // Vec3b
    // [0] - синия компонентв
    // [1] - зелёная компонента
    // [2] - красная компонента
    Vec3b point = frame.at<Vec3b>(c);
    // Возвращаем красную компоненту
    // Красная компонента последняя в массиве, так как используется пространство BGR (Blue-Green-Red)
    // point[0] - синяя компонента
    // point[1] - зелёная компонента
    // point[2] - красная компонента
    return point[2];
}
 
int main() {
    // Номер строки изображения, на которой будет происходить распознавание чёрной линии
    int scan_row = 470;
    // X координата правого края чёрной линии
    int center = -1;
 
    // Класс "Mat" представляет собой n-мерный числовой массив
    // Его можно использовать для хранения изображений
    // В данный класс мы будем записывать считанный кадр из видеопотока веб-камеры
    Mat frame;
    // VideoCapture - это класс для захвата видео из видеофайлов или камер
    // Открываем видеофайл
    VideoCapture cap("../../../black_line.avi");
    // Метод "isOpened()" возвращает true, если камера или видеофайл были открыты
    // в противном случаем false
    // Проверяем открыли ли камеру
    if(!cap.isOpened()) {   
        // Выводим сообщение о том, что камера не открылась
        cout << "Unable to open video source" << endl;
        return 1;
    }
    // Устанавливаем высоту кадров, которые будем считывать с веб-камеры
    cap.set(cv::CAP_PROP_FRAME_WIDTH, 640);
    // Устанавливаем высоту кадров, которые будем считывать с веб-камеры
    cap.set(cv::CAP_PROP_FRAME_HEIGHT, 480);
 
    while(true) {
        // Ждем нового кадра от камеры и сохраняем его в "frame"
        cap.read(frame);
        // Проверяем успешно ли считали кадр
        // Метод "empty()" возвращает true, если в массиве "Mat" нет элементов.
        if(frame.empty()) 
            // Если нет, то возвращаемся в начало цикла
            continue;
 
        // ***** Обнаружение чёрной линии на изображении *****
        // Предполагаем, то что правый край чёрной линии находится в этой x координате
        int x = 350;
        // Идём до начала изображения, пока не найдём чёрный пиксель
        // Чёрным пикселем считается, тот пиксель у которого красная компонента меньше 40
        for(; x > 0; x--){
            if(red_с(frame, Point(x, scan_row)) < 60)
                break;
        }
        // Устанавливаем x координату правого края чёрной линии
        center = x;
 
        // Рисуем линию
        // frame - изображение, на котором рисуем
        // Point(center, frame.rows) - координаты начала линии, сначала передаётся x координата, а потом y
        // Point(center, frame.rows - 40) - координаты конца линии, сначала передаётся x координата, а потом y
        // Scalar(255, 0, 0) - цвет рисуемой линии, передаётся в формате BGR
        // то есть первый элемент (255) - синяя компонента,
        // второй элемент (0) - зелёная компонента
        // третий элемент (0) - красная компонента
        // 2 - толщина рисуемой линии в пикселях
        line(frame, Point(center, frame.rows), Point(center, frame.rows - 40), Scalar(255, 0, 0), 2);
 
        // Показываем новый кадр
        imshow("frame", frame);
        // Функция "waitKey(time)" ждёт нажатия клавиши в течение "time" миллисекунд
        // Функция возвращает -1, если пользователь не нажал клавишу в течение указанного времени
        // В противном случаем возвращает код нажатой клавиши
        // Ждём нажатия клавиши в течение 5 миллисекунд
        // Если пользователь нажал любую клавишу, то выходим из цикла
        if(waitKey(5) >= 0) 
            break;
    }
    // Завершаем программу
    return 0;
}
0
869 / 583 / 160
Регистрация: 07.11.2019
Сообщений: 1,345
02.01.2021, 18:33 4
Лучший ответ Сообщение было отмечено Polykristi как решение

Решение

Как-то так:
Путь к файлу измените на нужный и добавьте обработку ошибок чтения файла, если необходимо.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import cv2
scan_row = 470
x = 350
cap = cv2.VideoCapture('black_line.avi')
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640 )
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
        line=frame[scan_row,:x,2]
        bw=cv2.threshold(line, 60, 255, cv2.THRESH_BINARY_INV)[1]
        center=cv2.findNonZero(bw)[-1][0,1]
        cv2.line(frame, (center, frame.shape[0]), (center, frame.shape[0]-40), (0, 0, 255), 2);
        cv2.imshow('frame',frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        print('Unable to open video source')
        break
cap.release()
cv2.destroyAllWindows()
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.01.2021, 18:33

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

как извлечь/добавить текст в программу, которая предположительно написана на TurboBasic
Моя проблема такова: Я в жизни ничего сложнее конспектов не писал и в программировании ничего не...

переписать программу на язык c++ с паскаля
program minimal; function Min(a,b,c:real):real; Begin if (a&lt;b) and (a&lt;c) then min:=a else if...

Переписать программу с С++ на язык матлаба и дополнить её
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt;...

Под какой язык проще переписать программу
Есть программа на языке True basic, она описывает хаотическое поведение системы частиц молекулярной...

Переписать программу на python
здравствуйте, есть алгоритм на C#. нужно переписать на python. работа с библиотекой opencv. кто...

Переписать программу с Python на C++
Доброго времени суток, уважаемые форумчане, необходима помощь в переводе программы с языка Python...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.