LINUX.ORG.RU

Сообщения HunterNomad

 

Неужели Python более производителен чем C++ с getPerspectiveTransform?!

Форум — Development

Доброго времени суток.

Неужели Python более производителен чем C++ с getPerspectiveTransform?! Я попробовал два похожих исходника. C++

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
 
#include <opencv2/gpu/gpu.hpp>
 
#include <iostream>
#include <stdio.h>
 
using namespace std;
using namespace cv;
 
int main(int, char**) {
    VideoCapture cap(0);
 
    if (!cap.isOpened())
        return -1;
 
    cap.set(CV_CAP_PROP_FPS, 0.55);
    cap.set(CV_CAP_PROP_FRAME_WIDTH, 1280);
    cap.set(CV_CAP_PROP_FRAME_HEIGHT, 960);
 
    
    Point2f inputQuad[4];
    
    Point2f outputQuad[4];
    
    Mat lambda(2, 4, CV_64FC3);
 
    //Mat edges;
    namedWindow("edges", 1);
    for (;;) {
        Mat frame;
        cap >> frame;
 
 
        lambda = Mat::zeros(frame.rows, frame.cols, frame.type());
 
        inputQuad[0] = Point2f(-30, -60);
        inputQuad[1] = Point2f(frame.cols + 50, -50);
        inputQuad[2] = Point2f(frame.cols + 100, frame.rows + 50);
        inputQuad[3] = Point2f(-50, frame.rows + 50);
 
        outputQuad[0] = Point2f(0, 0);
        outputQuad[1] = Point2f(frame.cols - 1, 0);
        outputQuad[2] = Point2f(frame.cols - 1, frame.rows - 1);
        outputQuad[3] = Point2f(0, frame.rows - 1);
 
        lambda = getPerspectiveTransform(inputQuad, outputQuad);
 
        warpPerspective(frame, frame, lambda, frame.size());
 
        flip(frame, frame, 1);
        imshow("edges", frame);
        if (waitKey(30) >= 0)
            break;
    }   
    return 0;
}
}

и на Python

# -*- coding: utf-8 -*-
 
import cv2
import numpy as np
import time
 
 
cap = cv2.VideoCapture(0)
 
cap.set(3, cap.get(3))
cap.set(4, cap.get(4))
time.sleep(1 / 30)
 
 
while True:
    ret, img = cap.read()
    imgray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.VideoCapture(0).release()bash-3.2$
    ret,thresh = cv2.threshold(imgray,127,255,0)
    contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
 
    if cap.isOpened() == 0:
            cap.open(0)
 
    res = cv2.resize(img,None,fx=2, fy=2, interpolation = cv2.INTER_CUBIC)
    """ X, Y """
    pts1 = np.float32([[0,0],[700,0],[0,1100],[600,1100]])
    pts2 = np.float32([[50,0],[600,0],[0,1100],[600,1100]])
    M = cv2.getPerspectiveTransform(pts1,pts2)
    dst = cv2.warpPerspective(res,M,(1250,550))
 
    dst = cv2.flip(dst, 1)
    cv2.namedWindow('input', cv2.WINDOW_NORMAL)
 
    cv2.imshow("input", dst)
 
    key = cv2.waitKey(10)
    if key == 27:
        break
 
cv2.destroyAllWindows()
cv2.VideoCapture(0).release()

И оказалось, что скриптовый python более производителен чем нативный c++ Т.е. на c++ сильные лаги.

В чем может быть причина?

Код и на python и c++ писал не сам, брал готовые примеры.

Спасибо.

 , ,

HunterNomad
()

QT Camera - захват части изображенния

Форум — Development

Доброго времени суток. Подскажите, пожалуйста, как решить следующую проблему. При захвате видео с камеры необходимо выбрать прямоугольный кусок видео и его и транслировать в дальнейшем. То есть, как пример есть камера с разрешением 800х600. Нужно выбрать участок скажем 500х200 и его, а не все 800х600 выводить как видео поток. Тут главное не выбор куска, а именно его трансляция. Мне главное знать какие классы и/или методы это позволяют делать, а дальше сам разберусь

Спасибо всем за ранее.

 

HunterNomad
()

RSS подписка на новые темы