首页 > 解决方案 > 带有示例代码的 OpenCV C++ 读取访问冲突

问题描述

我是第一次尝试openCV,所以为了测试它,我从这个网站复制了一些代码。

#include "opencv2/opencv.hpp"
#include <iostream>
 
using namespace std;
using namespace cv;
 
int main(){
 
  VideoCapture cap("file.mp4");
  if(!cap.isOpened()){
    cout << "Error opening video stream or file" << endl;
    return -1;
  }
   
  while(1){
    Mat frame;
    cap >> frame;
    if (frame.empty())
      break;
    imshow( "Frame", frame );
    char c=(char)waitKey(25);
    if(c==27)
      break;
  }
  
  cap.release();
  destroyAllWindows();
  return 0;
}

但是当我尝试它时,我在 imshow 行上遇到了读取访问冲突。

我尝试进入代码,发现当 Mat 转换为 _InputArray 时,obj 字段设置不正确,当 openCV 尝试访问它时,一切都崩溃了。通过这样写:

_InputArray in(frame);
*(uint64_t*)((char*)(&in) + 8) = (uint64_t)in.getObj();
imshow("Frame", in);

imshow 有效,但这是我发现的一个可怕的技巧,如果我尝试调用函数 cv::resize 程序无论如何都会崩溃。

我认为问题是由于lib dll不匹配的错误配置引起的,但是我尝试下载和编译各种版本的opencv,尝试在Debug和Release模式下编译,但似乎没有任何效果。

对于上下文,我将 vs19 与 openCV 4.5.2 x64 一起使用

标签: c++visual-studioopencv

解决方案


推荐阅读