Python 在VisualStudioC+;中使用OpenCV进行图像处理时,帧会急剧减少+;

Python 在VisualStudioC+;中使用OpenCV进行图像处理时,帧会急剧减少+;,python,c++,visual-studio,opencv,Python,C++,Visual Studio,Opencv,我正在使用Visual Studio 2017和OpenCV 3.1。在没有任何图像处理的情况下,帧速率非常好,但只要我进行图像处理,只要转换为灰度图像并应用高斯模糊,帧速率就会直线下降。Python中的相同代码几乎以实时帧速率运行(不应该C++比Python快)。这是我的密码 #include "opencv2\core\core.hpp" #include "opencv2\imgproc\imgproc.hpp" #include "opencv2/highgui/highgui.hpp"

我正在使用Visual Studio 2017和OpenCV 3.1。在没有任何图像处理的情况下,帧速率非常好,但只要我进行图像处理,只要转换为灰度图像并应用高斯模糊,帧速率就会直线下降。Python中的相同代码几乎以实时帧速率运行(不应该C++比Python快)。这是我的密码

#include "opencv2\core\core.hpp"
#include "opencv2\imgproc\imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>

using namespace cv;
using namespace std;
Mat processed_frame;

Mat imageProcessing(Mat frame_proc) {
  cvtColor(frame_proc, processed_frame, COLOR_BGR2GRAY);
  medianBlur(processed_frame, processed_frame, 5);
  GaussianBlur(processed_frame, processed_frame, Size(21, 21), 0);
  threshold(processed_frame, processed_frame, 127, 255, 0);
  cv::Mat structuringElement5x5 = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5));
  for (unsigned int i = 0; i < 5; i++) {
    cv::dilate(processed_frame, processed_frame, structuringElement5x5);
  }
  for (unsigned int j = 1; j < 2; j++) {
    erode(processed_frame, processed_frame, structuringElement5x5);
  }
  return (processed_frame);
}

int main() {
  Mat frame;
  Mat img3;
  VideoCapture cap("/path/to/Video/File");

  if (!cap.isOpened()) {
    cout << "Cannot open file" << endl;
    return -1;  
  }
  bool bSuccess = cap.read(frame);
  while (bSuccess) {
    cap >> frame;
    frame = imageProcessing(frame);*IF I COMMENT THIS LINE, FRAME RATE IS VERY GOOD
    imshow("VideoCapture", frame);
    cap.set(CV_CAP_PROP_FPS, 25);
    if (waitKey(1) == 27) {
        break;
    }
  }
return 0;
}
#包括“opencv2\core\core.hpp”
#包括“opencv2\imgproc\imgproc.hpp”
#包括“opencv2/highgui/highgui.hpp”
#包括
使用名称空间cv;
使用名称空间std;
垫式U型架;
Mat图像处理(Mat帧处理){
CVT颜色(帧处理、帧处理、颜色为灰色);
medianBlur(已处理的_帧,已处理的_帧,5);
GaussianBlur(加工的_帧,加工的_帧,大小(21,21),0);
阈值(已处理的_帧,已处理的_帧,127255,0);
cv::Mat structuringElement5x5=cv::getStructuringElement(cv::MORPH_RECT,cv::Size(5,5));
for(无符号整数i=0;i<5;i++){
cv::扩展(已处理的_帧、已处理的_帧、structuringElement5x5);
}
for(无符号整数j=1;j<2;j++){
侵蚀(加工的_框架、加工的_框架、结构元素5x5);
}
返回(已处理的帧);
}
int main(){
垫架;
Mat img3;
视频捕获cap(“/path/to/Video/File”);
如果(!cap.isOpened()){
沙发架;
frame=imageProcessing(frame);*如果我评论这行,帧速率非常好
imshow(“视频捕获”,帧);
封盖套件(CV、封盖、道具、FPS,25);
如果(等待键(1)=27){
打破
}
}
返回0;
}

是否在
Debug
模式下运行代码?此外,在任何情况下都不应修改
cap
对象返回的帧。必须为
图像处理
功能的输出分配一个单独的
Mat
。是的,我正在调试模式下运行它,因此我应该创建一个
帧。克隆
,然后对其应用图像处理??创建一个帧副本,然后对其应用图像处理,帧速率仍然没有太大差异。您应该在
Release
模式下运行它来衡量实际性能。@sgarizvi它在Release模式下工作,但我有一个问题,如果我想在Android(C++支持)中部署它,性能会是什么?此外,发布模式下的帧速率也有所提高,但仍然不如Python。