1. OpenCV
OpenCV是一个用于图像处理、分析、机器视觉方面的开源函数库,该库采用C及C++语言编写,可以在windows, linux, mac OSX系统上面运行。
2.waitKey()函数详解
1)waitKey()函数是在一个给定的时间内(单位ms)等待用户按键触发;如果用户没有按下键,则接续等待(循环)
2)如下所示:
while(1){
if(waitKey(100)==27)
break;
}
在这个程序中,我们告诉OpenCv等待用户触发事件,等待时间为100ms,如果在这个时间段内, 用户按下ESC(ASCII码为27),则跳出循环,否则,则跳出循环
3)如果设置waitKey(0),则表示程序会无限制的等待用户的按键事件
3.预编译头
头文件夹下会默认有头文件stdafx.h,而源文件夹下则默认有源文件stdafx.cpp,手动将这些文件删除后,编译时系统还会报错。
stdafx.h并不是标准C++头文件,也就是说,该文件本质上相当于自定义的一个头文件( 这里是VS默认自定义的文件),与项目的源代码文件存放在同一个文件文件夹下,通过#include"stdafx.h"引用。
4.DLL
动态链接库英文为DLL,是Dynamic Link Library的缩写。DLL是一个包含可由多个程序,同时使用的代码和数据的库。
例如,在 Windows 操作系统中,Comdlg32.dll 执行与对话框有关的常见函数。因此,每个程序都可以使用该 DLL 中包含的功能来实现“打开”对话框。
这有助于避免代码重用和促进内存的有效使用。 通过使用 DLL,程序可以实现模块化,由相对独立的组件组成。
5
stringstream 的.str()正确用法和清空操作
streamstring在调用str()时,会返回临时的string对象。而因为是临时的对象,所以它在整个表达式结束后将会被析构。
如果需要进一步操作string对象,先把其值赋给一个string变量后再操作。
用例:
stringstream ss(“012345678901234567890123456789012345678901234567890123456789”);
//错误用法
const char* cstr2 = ss.str().c_str();
//正确用法
const string& str2 = ss.str();
const char* cstr2 = str2.c_str();
使用stringstream时的清空操作
在C++中可以使用stringstream来很方便的进行类型转换,字符串串接,不过注意重复使用同一个stringstream对象时要 先继续清空,而清空很容易想到是clear方法,而在stringstream中这个方法实际上是清空stringstream的状态(比如出错等),真正清空内容需要使.str(“”)方法。
6.Debug Assertion Failed! 错误解决 (关于文件文件写入程序)
原因:
1.函数过于旧,不安全。
2.代码逻辑有问题 或者 函数参数写错了(大小写, 符号中文等)
解决方式:
1.运行环境需要设置,fopen()函数已经被新的fopen_s()取代,仍然使用需要修改一处环境
在预处理器》预处理器定义中复制添加这句话 _CRT_SECURE_NO_WARNINGS 在最下面 然后点击保存即可以:
7.问题:expression:stream!=NULL
如果fopen()后返回的是NULL;就不能调用fclose()了;
用fopen()获得的文件句柄不是NULL,那么就需要用fclose()来关闭它。如果是NULL则不需要
null就表示你打开文件失败了,根本都没有成功的访问文件,也就不存在对数据有什么损坏的可能。不需要关闭
8.imread(const string& filename, int flags=1)
例如: //读入图像单通道,即灰度图
ScrImage = imread(“C:\Users\Desktop\opencv_1.jpg”, 0);
imread函数从文件中加载图像并返回该图像。如果该图像不能被读取(由于文件丢失、权限不正确、不支持或非法的格式等原因),该函数返回一个空的矩阵(Mat中的data项为NULL)。
flag=-1时,8位深度,原通道
flag=0,8位深度,1通道
flag=1, 8位深度 ,3通道
flag=2,原深度,1通道
flag=3, 原深度,3通道
flag=4,8位深度,3通道