【技术】纹理特征与灰度共生矩阵

前言

在机器视觉中,纹理是一种图像特征,指图像中局部区域在视觉上呈现的重复或规则的图案和结构。这些图案通常不直接取决于物体的形状或边缘,而是由局部像素的排列、强度和颜色的分布决定的。纹理在物体的表面或背景上提供了丰富的信息,可以帮助算法识别物体的类别、形状、位置、表面状态等。

【TensorRT】官方快速入门指南(中文)

前言

本文是 The TensorRT Ecosystem 的中文翻译。

【CUDA】cuda学习笔记

Let's learn CUDA together! 🚀

请多指教!

查看链接
【CUDA】std::vector Allocator

前言

最近在跟着 小彭老师的 CUDA 课程 学习时,发现了一个平时很少用到的 vector 的功能,那就是自定义内存分配器。

通过查看 cppreference,发现 vector 的构造函数有两个形参,一个是 T 类型的对象,另一个是 Allocator 类型的对象, 其中 Allocator 默认为 std::allocator<T>:

cpp
template<
    class T,
    class Allocator = std::allocator<T>
> class vector;

在往 vector 中插入元素时,会调用 Allocator 的 allocate 函数来分配内存,移除元素时会调用 deallocate 函数来释放内存。

【C++】std::sort 原理

前言

在C++标准库中,std::sort的底层实现通常使用的是混合排序算法,具体来说是introsort(内省排序)。

introsort结合了快速排序、堆排序和插入排序的优点:

  1. 快速排序:在一般情况下,std::sort使用快速排序,因为它平均情况下有很好的时间复杂度 O(nlogn) 。它通过选择一个基准(pivot),然后将数组分为两部分,一部分小于基准,另一部分大于基准,然后递归排序。

  2. 堆排序:快速排序的最坏情况时间复杂度是 O(n²) ,为避免这一情况,当递归深度超过某个阈值时,std::sort会切换到堆排序,确保时间复杂度为 O(nlogn)

  3. 插入排序:在数组规模较小的时候,std::sort会切换为插入排序,因为在小规模数据上,插入排序效率更高。

这种组合使得std::sort在处理不同规模和不同结构的数据时,既能保持高效的平均性能,又能避免最坏情况的性能退化。

【C++】libwebsockets 服务端示例

前言

Libwebsockets is a simple-to-use, MIT-license, pure C library providing client and server for http/1, http/2, websockets, MQTT and other protocols in a security-minded, lightweight, configurable, scalable and flexible way. It's easy to build and cross-build via cmake and is suitable for tasks from embedded RTOS through mass cloud serving.

libwebsockets 是一个简单易用的、MIT 许可的、纯 C 语言库,提供了 HTTP/1、HTTP/2、WebSockets、MQTT 和其他协议的客户端和服务器实现。它以安全为导向,轻量级、可配置、可扩展和灵活。通过 cmake 构建和交叉构建非常容易,适用于从嵌入式 RTOS 到大规模云服务的任务。

留作备忘。

【RK3588】关于 devfreq 和 cpufreq 的记录

前言

本文主要介绍了 /sys/class/devfreq/sys/devices/system/cpu/cpufreq 目录,以及如何手动管理和监控设备频率和 CPU 频率。同时提供了简单的 Python 脚本,用于打印设备和 CPU 的频率信息。

环境信息:

  • 硬件:Friendly NanoPi-R6S
  • 固件:rk3588-usb-debian-bullseye-minimal-6.1-arm64-20240131

部分内容由 Github Copilot 自动生成,仅供参考。