c++ - 带有示例代码的 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 一起使用
解决方案
推荐阅读
- php - Facades:不应静态调用非静态方法
- javascript - 如何在 chart.js 中更改 X 轴间隔
- hadoop - java.io.IOException:来自 Hadoop 数据节点上 inputStream 的过早 EOF
- ios - 非公共 API 使用
- python - 如何在python中使用tensorflow模型
- module - Kentico,全球事件未触发
- excel - 如何在谷歌脚本(marco excel)中查找数组中存在的元素数量
- python - Python追加到列表覆盖列表中的所有其他元素
- linear-programming - 线性规划线去除最优解
- javascript - 允许小数点后两位数