注意printf少参数会崩溃
modbus是独占模式
结构体注意字节对齐
数组注意防止越界
使用short要注意范围溢出
找不到错误时可以试试删除中文注释
//(*imageData)[i*width * 3 + j * 3 + 2]
二级指针注意优先级
c++线程只能传指针或者值,不能传引用,参数传string不要传char*
文件编码,linux本地为utf-8,window下为ANSI
//unsigned char **oi = new unsigned char *[Row];
//for (int i = 0; i < Row; i++)oi[i] = new unsigned char[Col];
这样申请的内存并不是连续多的,不能直接fwrite写,只有char oi[][]才是真正的二维数组
所以能用vector代替C语言数组,一维的数组就用一维的vector,多维的数组就用多维的vector,可以避免内存泄露
接口尽量用string 代替char* ,当然最外层如果要求是纯C接口就再封装一层,否则尽可能用STL
另外不定长的多维数组可以用字符串转换(可能影响效率)
访问图像的像素时,一定要先行、再列的循环访问,次序不能换,行row(高height),列col(宽width)
//OPENCV的RGB存储顺序实际是(B G R)
BMP图片的第一个像素点在左下角,然后往右一个个存取,最后一个在右上角
RAW第一个像素点是在左上,最后一个像素点是右下,所以bmp转raw就是y坐标互换
所谓的异步就是开线程处理
接头单一原则,把大的功能拆成小块,功能尽可能单一方便应用层灵活调用
//bmpHead.BfOffBits = 1078 + 256;
在bmp图片存储额外数据
数据类型整形尽量用 uchar(能不用char就不用) int 和long long 浮点型尽量用float和double
//reduce(data_fore1, thresh_min, 0, CV_REDUCE_MIN,CV_64F);
opencv的reduce函数输入必须和输出一致都为doble
//opencv数据不带通道数的这些类型就是默认通道数为1
//CV_8U就等同于CV_8UC1,CV_32S就等同于CV_32SC1
//S--代表---signed int---有符号整形
//U--代表--unsigned int--无符号整形
//F--代表--float---------单精度浮点型
//在循环里加日志需要慎重,最好加在前后
std::fflush会乱写东西
oftream 记得close()
c++之常犯错误(二)
最新推荐文章于 2024-09-02 13:43:09 发布