Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCv—内存位置C+处的异常+;_C++_Opencv - Fatal编程技术网

C++ OpenCv—内存位置C+处的异常+;

C++ OpenCv—内存位置C+处的异常+;,c++,opencv,C++,Opencv,我有一个程序,它加载到视频文件中,让用户决定阈值,然后逐帧写出视频的“阈值表示”。当我构建并运行它时,它会工作,但不会在抛出“内存位置异常…”之前 有什么问题吗? 谢谢 #包括“opencv2/highgui/highgui.hpp” #包括“opencv2/imgproc/imgproc.hpp” #包括“opencv2/core/core.hpp” #包括 使用名称空间cv; 使用名称空间std; 垫架3、架4; int tValue=100; //移动跟踪器时调用的函数 void call

我有一个程序,它加载到视频文件中,让用户决定阈值,然后逐帧写出视频的“阈值表示”。当我构建并运行它时,它会工作,但不会在抛出“内存位置异常…”之前 有什么问题吗? 谢谢

#包括“opencv2/highgui/highgui.hpp”
#包括“opencv2/imgproc/imgproc.hpp”
#包括“opencv2/core/core.hpp”
#包括
使用名称空间cv;
使用名称空间std;
垫架3、架4;
int tValue=100;
//移动跟踪器时调用的函数
void callFunc(int,void*){
阈值(帧3,帧4,tValue,255,阈值二进制);
imshow(“阈值调整”,第4帧);
}
int main(int argc,常量字符**argv)
{
视频捕获cap(“C:/video/park.avi”);
如果(!cap.isOpened()){
cout框架1;
垫架2;
封盖套件(封盖支架,1);
cap>>框架2;
//计算两帧之间的绝对差值
absdiff(第1帧、第2帧、第3帧);
namedWindow(“阈值调整”,CV_窗口_自动调整);
createTrackbar(“值”、“阈值调整”和tValue,255,callFunc);
callFunc(0,0);
开关(等待键(0)){
案例27:
大小帧大小(cap.get(CV_cap_PROP_FRAME_WIDTH)、cap.get(CV_cap_PROP_FRAME_HEIGHT));
VideoWriter输出(cap(“D:/out.avi”、CV_FOURCC(“D”)、“I”、“V”、“3”)、cap.get(CV_cap_PROP_FPS)、帧大小,1);
对于(int k=0;k>框架1;
封盖套件(封盖支架,k+1);
cap>>框架2;
absdiff(第1帧、第2帧、第3帧);
阈值(帧3,帧4,tValue,255,阈值二进制);
输出盖写入(第4帧);
}
返回0;
}
返回0;
}

我认为您的问题在于开关从未获得值27。请尝试以下操作:

char key = waitKey(0);
switch (key){
不同之处在于,您将waitkey的结果存储在一个char变量中,因此如果按ESC键,值将为27。按照您的操作方式,它将waitkey的结果存储在一个int变量中,因此您将获得值1048603


您也只能在代码中更改27乘1048603。

很有趣,但它不起作用:(相反,当我按escape(27)时,程序确实起作用-它确实渲染出生成的视频,它只是因为抛出异常而无法正确退出。当我按任何其他键时(不是escape)它正确退出,但当然不会渲染视频。好的。当我尝试你的代码时,它发生在我身上。那么,如果你在调试模式下运行程序,程序会在哪里停止?我可以毫无问题地执行你的代码…(显然)我也可以执行代码,它也可以工作,只是在它完成运行并写出视频后,它抛出了那个异常..你在运行代码时没有遇到那个异常吗?我认为异常是因为frame3。试着把
frame3.release();
放在我身上
char key = waitKey(0);
switch (key){