2018.05.05
本次需要统计4096个像素的平均值,使用了如下代码
double CtuMean=temp/height*width;
错误的原因是没有考虑到运算符的优先级,以后这种情况要注意。尽量加个括号。
2018.05.07
vs2005以上,使用strcat()函数时,会提示“建议使用strcat_s()”函数,如果不想使用这个函数,关闭预编译提醒,
在项目->属性->C/C++–>预处理器->预处理器定义中添加“_CRT_SECURE_NO_WARNINGS”,即可关闭“_CRT_SECURE_NO_WARNINGS”的警告。
2018.05.25
写了一个程序,对监控类视频进行运动检测,主函数是这么写的。
#include "interface.h"
#include<iostream>
#include <time.h>
//#define FRAME_SIZE 3110400 //1920*1080分辨率
#define FRAME_SIZE 1382400 //1280*720分辨率
char yuvData[FRAME_SIZE];
char resultMatrix[128][128];//检测区域最大128x128
bool alarmResult;
int main()
{
...
//读取文件到内存
fread(yuvData, sizeof(char), sizeof(yuvData), InputFile);
...
}
出现的问题:
1.”0xC0000005: 写入位置 0x00000000 时发生访问冲突的解决办法”
原因:第一次试验用的1920*1080分辨率视频,后来换了1280*720分辨率,但是宏定义的大小没有变,还是原来1920*1080分辨率的大小。导致读取文件出错,引起后边一系列出错。
2.char yuvData[FRAME_SIZE];
放在main函数中报错,栈溢出。
全局变量在静态存储区分配内存,局部变量是在栈上分配内存空间的。(c++在运行时会动态创建一个堆栈段,里面存放着调用栈,保存着函数的调用关系和局部变量。)如果数组太大,可能会造成栈溢出。大数组最好放在全局变量区
2018.06.04
几天不写代码,就忘了VS操作中如何从函数定义的一个括号转到结束处的另外半个括号的方法,记录一下:
ctrl+]
2018.06.26
1.这两天在学习FFMPEG,配置一直不成功,include和lib都弄好了,就是编译的时候显示无法引用,后来想起来我下载的是64位的,而vs2013选择的是win32模式,切换到x64模式下后,立马编译成功了,发现原来ffmpeg的dev版本是对x64和win32敏感的,下载什么版本的dev就用什么版本的编译器配置就对了。
2.像Opencv、FFMPEG、SDL这些第三方库,在vs配置中都需要在三个地方改东西:
- c/c++->常规->附加包含目录中让包含库目录的include
- 链接器->常规->附加库目录让包含库目录的lib
- 链接器->输入->附加依赖项,输入lib目录下的*.lib的名称全称。