点击上方蓝字关注我们
微信公众号:OpenCV学堂
关注获取更多计算机视觉与深度学习知识
引言:
前面写过了两篇文章,主要是帮大家搞清楚了OpenCV中一些常用的C++基础知识,本文我们继续来搞清楚OpenCV C++中一些常用的C++基础知识。
01
size_t是什么
很多人会问size_t是什么,特别是刚接触C++版本OpenCV的,简单的说一下size_t就是跟int/float等这些数据类型定义相似的一个数据类型定义,它表示的是无符合的整型数据,在<stddef.h>, <stdio.h>, <stdlib.h>, <string.h>, <time.h>, <wchar.h>等这些头文件中均有定义。C语言中内存分配、内存拷贝、字符串长度声明的都使用size_t。此外size_t经常用来表现对象的数目,注意size_t数据不可能为负数。下面的例子就是以前一个人问我过得,我当时调试半天也没搞清楚,后来终于悟道了!代码如下:
std::vector<int> a = { 11, 21, 9, 14, 8, 19 };
// 正确遍历
for (size_t t = 0; t < a.size(); t++) {
std::cout << "a["<<t<<"] = "<< a[t] << std::endl;
}
// 执行到地球爆炸!不会停止的!
for (size_t t = a.size() - 1; t >= 0; --t) {
std::cout << "a[" << t << "] = " << a[t] << std::endl;
}
std::sort(a.begin(), a.end());
for (auto i : a) {
std::cout << i << std::endl;
}
此外size_t大小其实是跟底层平台是32位还是64位还有关系,不同平台上长度不一致。所以这个变量类型是一个平台依赖的。
02
数值精度取舍
C++浮点数计算数值精度的取舍支持,OpenCV中有三个相关函数,它们分别是:
intcvRound (doublevalue) // 四舍五入intcvFloor (doublevalue) // 总是舍弃intcvCeil (doublevalue) // 总是进位
代码演示如下:
double x = 11.8234;
double b = 9.456;
int y = cvRound(x);//std::round(x);
int yb = cvRound(b);//std::round(x);
std::cout << "y = "<<y << std::endl;
std::cout << "yb = " << yb << std::endl;
int z = cvFloor(x);//std::round(x);
int c = cvFloor(b);//std::round(x);
std::cout << "z = " << z << std::endl;
std::cout << "c = " << c << std::endl;
int cx = cvCeil(x);
int cb = cvCeil(b);
std::cout << "cx = " << cx << std::endl;
std::cout << "cb = " << cb << std::endl;
运行结果如下:
03
快速生成随机像素图象
随机像素生成随机噪声图象,这个在很多OpenCV数据处理中会经常用到,相关函数为:
voidcv::randu(InputOutputArraydst,InputArraylow,InputArrayhigh)
代码演示如下:
Mat m = Mat::zeros(512, 512, CV_8UC3);Mat image = imread("D:/images/lena.jpg");randu(m, Scalar(0, 0, 0), Scalar(155, 155, 155));add(image, m, image);imshow("随机数", image);waitKey(0);
运行结果如下:
扫码查看OpenCV/Pytorch/OpenVINO视频教程
推荐阅读
OpenCV4 C++学习 必备基础语法知识二
Tensorflow + OpenCV4 安全帽检测模型训练与推理
极简教程 | OpenCV4 C++学习 必备基础语法知识
OpenCV Python + Tesseract-OCR轻松实现中文识别
YOLOv5在最新OpenVINO 2021R02版本的部署与代码演示详解
LesionNet 医疗图像分割网络模型实现皮肤病灶分割
YOLOv5实现自定义对象训练与OpenVINO部署全解析
推理演示 | 八步助你搞定tensorRT C++ SDK调用!
基于OpenCV+ZXing手工打造,FPS300+的二维码识别库
深度解读 OpenCV中的VideoCapture视频读取
极简教程 | OpenCV4 C++学习 必备基础语法知识
OpenCV学堂 | 2020年 原创技术文章汇总
经验 | OpenCV图像旋转的原理与技巧
汇总 | OpenCV DNN模块中支持的分类网络
汇总 | OpenCV DNN支持的对象检测模型
汇总 | OpenCV4中的非典型深度学习模型
|