OpenCV4 C++学习 必备基础语法知识三

[复制链接]
查看19956 | 回复0 | 2024-1-10 09:06:36 | 显示全部楼层 |阅读模式


点击上方蓝字关注我们

微信公众号: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中的非典型深度学习模型

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则