Доброго времени суток.
Неужели 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++ писал не сам, брал готовые примеры.
Спасибо.