自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(76)
  • 收藏
  • 关注

原创 Ubuntu安装Docker

在 Linux ,在终端上运行以下命令验证内核以及架构详细信息:正如上面你看到的那样,我的 Ubuntu 系统内核版本是 5.15.0-101并且系统架构是 64 位(x86_64 x86_64 x86_64 GNU/Linux)要验证Docker是否正确安装,您可以运行一个简单的测试容器。1:更新你的 Ubuntu 系统。2:添加 Docker 库。3:安装 Docker。

2024-04-03 11:16:30 249

原创 Ubuntu安装GLEW

GLEW(OpenGL Extension Wrangler Library)是一个开源的C/C++库,它用于管理OpenGL的扩展功能。GLEW能够查询OpenGL的扩展,确定它们是否可用,并在你的应用程序中动态地使用它们。

2024-02-25 17:05:12 492

原创 Ubuntu安装NVIDIA显卡驱动

输入命令 lspci | grep -i vga 或者 lspci | grep -i nvidia(如果是NVIDIA显卡),然后按Enter键。在输出信息中,查找显卡型号。通常,显卡型号会显示在类似于“VGA compatible controller”或“NVIDIA Corporation”的行中。Nouveau是一个开源的显卡驱动,与NVIDIA的官方驱动冲突。下载与你的显卡型号和Ubuntu版本相匹配的驱动程序。如果一切正常,这个命令应该会显示关于你的NVIDIA显卡的信息。

2024-02-25 16:16:06 1182

原创 【OpenCV】简介

官网OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它包含了大量的函数和算法,用于处理图像和视频数据,进行目标检测、跟踪、特征提取等任务。

2024-02-23 12:11:42 837

原创 【OpenCV】CUDA模块8:计算Mat中最大值最小值

接下来,我们使用 cv::cuda::max 计算这两个数组对应元素的最大值,并将结果存储在另一个 cv::cuda::GpuMat 对象 dst_gpu 中。在这个例子中,我们首先加载一张灰度图像到 cv::Mat 对象中,然后将其上传到 GPU 作为 cv::cuda::GpuMat 对象。3:并行计算:在需要并行执行最大值计算的场景中,例如在大规模数据集的统计分析中,cv::cuda::max 可以提供高效的解决方案。cv::cuda::max 可以用于选择两个特征值中的较大者。

2024-02-19 21:41:17 425

原创 【OpenCV】CUDA模块8:采样/resize()

在OpenCV中,图像采样通常指的是改变图像的尺寸或分辨率,这可以通过上采样(增大图像)或下采样(缩小图像)来实现。这些操作在图像处理中非常常见,用于调整图像大小、准备数据以供机器学习模型使用、构建图像金字塔等。OpenCV提供了多个函数来进行图像采样:1):上采样 - cv::pyrUp:此函数用于增大图像的尺寸。它通常基于线性插值或某种形式的图像重建滤波器来工作。在OpenCV的CUDA模块中,cv::cuda::pyrUp是对应的GPU加速版本。

2024-02-19 21:11:45 1135

原创 【OpenCV】CUDA模块7:PtrStep<>

注意:在这个修正后的示例中,我使用了 cv::cuda::PtrStepSz 而不是 cv::cuda::PtrStep。cv::cuda::PtrStep 通常用于与 cv::cuda::GpuMat 一起工作,后者是一个用于在 GPU 上存储图像或矩阵的类。通过 cv::cuda::GpuMat::ptr 方法,可以获取一个指向图像特定行的 cv::cuda::PtrStep 对象,然而,在实际使用中,cv::cuda::PtrStep 往往与特定的元素类型一起使用,而步长类型则根据元素类型自动推断。

2024-02-19 20:01:35 402

原创 【OpenCV】CUDA模块6:Stream

同一个流中的命令会按照它们被添加到流中的顺序执行,而不同流中的命令则可以并行执行,具体取决于 GPU 的硬件资源和调度策略。cv::cuda::Stream 类提供了创建和操作 CUDA 流的功能。在 OpenCV 的 CUDA 模块中,许多函数都接受一个 Stream 参数,以便你可以指定在哪个流上执行该操作。然而,上面的代码示例实际上并没有利用到 CUDA 的并行性,因为我们没有创建真正的独立流。cv::cuda::Stream 是 OpenCV CUDA 模块中的一个类,它表示一个 CUDA 流。

2024-02-19 19:35:43 466

原创 【OpenCV】CUDA模块5:compare()

然后,我们使用 cv::cuda::compare 函数比较这两个矩阵中的元素,并将结果存储在 result 中。cmpop:比较操作的类型,可以是以下之一:CMP_EQ(等于)、CMP_GT(大于)、CMP_GE(大于或等于)、CMP_LT(小于)、CMP_LE(小于或等于)或 CMP_NE(不等于)。cv::cuda::compare 是 OpenCV 的 CUDA 模块中的一个函数,用于在 GPU 上执行两个矩阵(通常是 cv::cuda::GpuMat 类型)之间的元素级比较操作。

2024-02-19 19:23:12 329

原创 【OpenCV】CUDA模块4:copyMakeBorder()

在这个示例中,我们首先读取了一张灰度图像到 GpuMat,然后使用 cv::cuda::copyMakeBorder 在图像周围添加了指定大小的常数边框(值为 0)。borderType:边框类型,可以是 cv::BORDER_CONSTANT、cv::BORDER_REPLICATE、cv::BORDER_REFLECT 或 cv::BORDER_WRAP 等之一。dst:输出图像,类型为 cv::cuda::GpuMat,包含了添加了边框的输入图像。

2024-02-19 19:19:46 389

原创 【OpenCV】CUDA模块3:图像转换及采样

在这个例子中,我们首先加载一张彩色图像到 cv::Mat 对象中,然后将其上传到 GPU 作为 cv::cuda::GpuMat 对象。接着,我们使用 cv::cuda::cvtColor 将图像从 BGR 颜色空间转换为灰度颜色空间,并将结果存储在另一个 cv::cuda::GpuMat 对象中。在这个例子中,我们首先加载一张灰度图像到 cv::Mat 对象中,并将其上传到 GPU 作为 cv::cuda::GpuMat 对象。它基于给定的映射关系,将输入图像中的像素位置映射到输出图像中的新位置。

2024-02-19 19:13:09 361

原创 【OpenCV】CUDA模块2:矩阵multiply/subtract/add运算

在这个示例中,cv::cuda::multiply 函数接受两个输入图像 gpu_img1 和 gpu_img2,并生成一个输出图像 gpu_result,其中包含两个输入图像的逐元素乘积。函数的基本用法是将两个相同大小和类型的 cv::cuda::GpuMat 对象作为输入,并输出一个包含逐元素乘法结果的新 cv::cuda::GpuMat 对象。4:增强对比度:在某些情况下,通过从一个图像中减去另一个图像(可能是模糊版本或低通滤波后的图像),可以增强图像的对比度,特别是边缘和细节部分。

2024-02-19 19:12:30 366

原创 【OpenCV】CUDA模块1:GpuMat()

2:高效的数据传输:该类提供了在 CPU 和 GPU 之间高效传输数据的方法,如 upload() 和 download(),这些方法用于将数据从 CPU 内存传输到 GPU 内存,或者从 GPU 内存传输回 CPU 内存。3:与 CPU 上的 cv::Mat 兼容:cv::cuda::GpuMat 的设计使其与 CPU 上的 cv::Mat 类兼容,便于在两者之间进行转换和操作。这里,img1应该是一个已经加载到内存中的图像。1:它声明了一个cv::cuda::GpuMat类型的变量gpu_img1。

2024-02-19 19:11:30 569

原创 win10磁盘分区

3、然后在右侧界面中找到内存最大的盘D盘,鼠标右键选择【压缩卷】打开,新盘大小为200G 点击压缩。4、压缩完成后,界面中会出现一个黑色框,里面显示200G未分配的磁盘,2、在计算机管理界面中依次点击【储存】->【磁盘管理】,进入下一步。1、进入win10桌面,鼠标右键【此电脑】,选择【管理】打开。8、回到桌面,点击此电脑,我们就可以看到新的分区出现了。5、鼠标右键黑色区域未分配的磁盘上,选择【新建简单卷】7、分区创建完成后黑色未分配磁盘就会变成蓝色的了。选择分区->删除卷->是 设置分区为未分配。

2024-02-19 15:21:11 312

原创 【Ubuntu】软件包管理工具

Ubuntu常用的软件包管理工具主要是apt,dpkg。apt:这是Ubuntu中最常用的软件包管理工具,它是Advanced Packaging Tool的缩写。apt可以自动处理软件包之间的依赖关系,并提供安装、更新、升级和删除软件包的功能。dpkg:dpkg是Debian Package的缩写,是Ubuntu底层的软件包管理工具。它主要用于安装、删除和管理.deb软件包,但无法自动解决依赖关系,需要用户手动处理。

2024-02-19 14:43:35 925

原创 【ubuntu】: /dev/loop0-6 100%

2:临时文件或缓存占满空间:某些应用程序或服务可能会使用/dev/loop0来存储临时文件或缓存数据,如果这些文件或数据不断增长并且没有被正确清理,也可能导致空间占满。3:挂载点或文件系统问题:如果/dev/loop0所挂载的文件系统或挂载点存在问题,例如权限设置不当、文件系统损坏等,也可能导致异常的空间占用。1:挂载的文件或磁盘镜像过大:如果你挂载了一个非常大的文件或磁盘镜像,并且尝试在其中写入大量数据,这可能会导致/dev/loop0空间不足。磁盘I/O操作可能会变慢,导致应用程序响应迟缓。

2024-02-19 12:44:58 1111

原创 制作Ubuntu启动U盘

3:安装UltraISO,打开软碟通,点试用就行了,右键以管理员身份打开UltraISO软碟通制作工具,5、然后依次点击“启动”—“写入硬盘映像”,写入方式一般是USB-HDD+,其他选项保持默认设置。7:写入->是 在提示刻录成功之后,U盘就做成启动盘了。4:然后点击“文件”—“打开”->加载镜像。2:插入u盘,u盘容量一定要大于镜像文件。1:下载镜像和软碟通。

2024-02-19 12:37:17 441

原创 【Ubuntu】使用启动U盘 拷贝文件到硬盘备份

若Ubuntu系统启动时报错,尝试了各种办法,一直进不去,只能重装。这种情况下需要把重要的项目文件拷贝出来。

2024-02-19 12:01:28 436

原创 OpenMP

OpenMP是一种并行编程的模型和API(应用程序接口),它提供了一套简单灵活的机制,用于在共享内存系统中开发并行应用程序。OpenMP特别适用于多核和多处理器系统,允许程序员在代码中指定可以并行执行的部分,从而实现程序的并行化。OpenMP支持多种编程语言,包括C、C++和Fortran,并提供了一组编译器指令(pragma)、运行时库函数和环境变量,用于控制并行执行和同步。通过OpenMP,程序员可以更加容易地利用多核处理器的并行计算能力,提高程序的性能和效率。

2024-02-08 16:57:21 986

原创 CUDA:cudaHostAlloc()

cudaHostAlloc() 是 CUDA 中的一个函数,用于在主机(CPU)上分配页锁定(或称为“固定”)内存。页锁定内存与普通的可分页主机内存相比有一些优点,尤其是对于 CUDA 编程:更高的数据传输速度:当数据需要从主机内存传输到 GPU 设备内存时,页锁定内存通常能够提供更高的带宽,因为 GPU 可以直接访问物理内存页,而无需通过操作系统的页面交换机制。异步数据传输:页锁定内存允许主机和设备之间的数据传输与主机上的其他操作并行进行。

2024-02-07 16:48:18 601

原创 CUDA:Event

等待事件:主机代码可以使用 cudaEventSynchronize() 函数等待一个事件。当调用 cudaEventCreate() 时,需要传递一个 cudaEvent_t 类型的指针,函数成功执行后,这个指针将指向一个新创建的事件对象。记录事件:使用 cudaEventRecord() 函数将事件记录到特定的 CUDA 流中。销毁事件:当不再需要事件时,应该使用 cudaEventDestroy() 函数来释放与事件相关联的资源。cudaEventSynchronize(): 用于等待事件完成。

2024-02-07 14:23:21 374

原创 CUDA:常用函数2

cudaDeviceReset() 是 CUDA 的一个函数,用于重置当前 GPU 设备,释放所有与该设备关联的资源,如内存和缓存。cudaDeviceSynchronize()是当前推荐使用的函数,因为它提供了更广泛的同步功能,并可能在未来的CUDA版本中继续得到支持。cudaDeviceSynchronize() 是一个 CUDA 函数,它确保所有之前发出的、与当前设备(GPU)关联的主机(CPU)线程中的 CUDA API 调用都已完成执行。在实际应用中,使用哪一个函数取决于你的同步需求。

2024-02-07 14:19:38 903

原创 ffmpeg: Assertion desc failed at libswscale/swscale_internal

报错如下:ffmpeg: Assertion desc failed at libswscale/swscale_internal。问题出在sws_getContext函数,但是是vCodecContext的参数有误导致的。经过检查是少写了下面的赋值。

2024-02-06 21:38:31 378

原创 ffmpeg:avformat_open_input

AVFormatContext **ps:这是一个指向 AVFormatContext 结构体的指针的指针。AVDictionary **options:一个指向 AVDictionary 结构体的指针的指针,用于传递打开媒体文件时的选项。AVInputFormat *fmt:指定输入格式的 AVInputFormat 结构体的指针。avformat_open_input() 是一个函数,通常用于打开输入媒体流并读取其头部信息。const char *url:要打开的媒体文件的 URL 或路径。

2024-02-06 19:36:36 347

原创 ffmpeg:av_dump_format

当调用 av_dump_format 函数时,它会遍历 AVFormatContext 中的所有流,并打印出每个流的编解码器类型(视频、音频、字幕等)、编解码器名称、比特率、帧率、采样率、通道数以及其他与流相关的属性。int index:这是一个整数,指定了要打印的流的索引。通常,这个值可以是 -1,表示打印所有流的信息,或者是一个特定的流索引,表示只打印该流的信息。AVFormatContext *ic:这是一个指向 AVFormatContext 结构体的指针,该结构体包含了媒体文件的元数据和流信息。

2024-02-06 19:20:23 426

原创 FFmpeg : AVDictionary键值对

AVDictionary 是 FFmpeg 库中的一个重要数据结构,用于存储键值对(key-value pairs)。这种数据结构类似于其他编程语言中的字典(dictionary)或哈希表(hash table),允许用户通过特定的键来快速查找和访问相关联的值。在 FFmpeg 的上下文中,AVDictionary 通常用于传递配置选项给库中的各种函数。例如,当你想要打开一个编解码器(codec)或设置一个流的参数时,你可以使用 AVDictionary 来指定这些选项。

2024-02-06 18:04:58 465

原创 FFmpeg:配置信息

获取当前FFmpeg的配置信息。

2024-02-06 16:46:01 336

原创 CMake Error: Cannot open file for write:

解决: 使用root权限。

2024-02-06 16:36:34 427

原创 shell: zip/chmod

chmod 是一个在 Unix 和 Unix-like 操作系统(如 Linux)中用于修改文件或目录权限的命令。权限决定了哪些用户可以对文件或目录进行读取、写入或执行操作。

2024-02-06 16:14:19 389

原创 CMake:undefined reference to xxxx

解决:检查CMake 所有配置都没有问题后 确认缺少 extern “C”

2024-02-05 21:35:03 407

原创 CMake: error adding symbols

target_link_libraries 缺少avutil 库 需添加。执行make 如下报错。

2024-02-05 21:28:20 349

原创 Ubuntu安装SDL

Cmake 编译运行。

2024-02-05 17:19:38 374

原创 include 头文件点不进去

ctrl+p >c/c++:Edit Configuration 创建 c_cpp_properties.json。Mac上c_cpp_properties.json配置文件需要删除configurationProvider。添加路径 SDL2在 /usr/local/ffmpeg/include下。确认库确实存在,且环境变量正确。

2024-02-05 17:04:26 340

原创 Ubuntu 源码安装ffmpeg

下载地址 https://code.videolan.org/videolan/x264/-/archive/master/x264-master.tar.bz2。下载地址 https://sourceforge.net/projects/opencore-amr/files/fdk-aac/下载地址 https://sourceforge.net/projects/lame/下载地址 https://www.speex.org/downloads/

2024-02-04 20:09:03 382

原创 MAC fatal error: ‘malloc.h‘ file not found

【代码】MAC fatal error: ‘malloc.h‘ file not found。

2024-02-04 14:18:39 373

原创 GDB 调试

1:编译代码:首先,你需要使用-g选项来编译你的代码,以便包含调试信息。3:设置断点:在你想停止执行的地方设置断点。4:运行程序:现在,你可以使用run命令来启动你的程序。如果你想传递参数给程序,你可以在run命令后面添加它们。5:检查变量和调用栈:当程序在断点处停止时,你可以使用各种GDB命令来检查变量的值和调用栈。7:退出GDB:当你完成调试时,你可以使用quit命令退出GDB。2:启动GDB:然后,你可以使用GDB来启动你的程序。6:步进和跳过:你可以使用各种命令来步进或跳过代码。

2024-02-02 21:11:22 367

原创 c++:关键字

typedef 用于为现有的数据类型创建一个新的名字。这通常用于简化复杂的数据类型,使其更易于使用和管理。nullptr_t (虽然 nullptr 本身不是关键字,但它是 C++11 中引入的,用于表示空指针)typedef` 还经常用于指针类型、数组类型和其他复杂的数据结构,使代码更简洁、易读。char8_t (用于表示 UTF-8 字符)auto (在 for 循环中的新含义)concepts (概念)

2024-02-02 17:14:17 350

原创 C++:常用预处理器宏

_cplusplus:表示 C++ 标准版本。例如,__cplusplus 的值为 201103L 表示 C++11 标准。:表示是否使用标准 C 库。如果定义了该宏,则表示正在使用标准 C 库。C++ 预处理器宏是预处理器指令,它们在编译之前处理源代码。格式为 Mmm dd yyyy,例如。,这通常用于生成日志记录,以帮助跟踪和调试代码。,生成文件名或日志记录,以帮助跟踪和调试代码。的值为 Oct 23 2023。: 表示当前源代码文件的文件名。:表示当前源代码文件的行号。: 表示当前函数的名称。

2024-02-02 11:19:55 327

原创 CUDA:创建和使用Stream

CUDA中的流(stream)表示一个GPU操作队列,该队列中的操作将以添加到流中的先后顺序而依次执行。可以将一个流看做是GPU上的一个任务,不同的流(即不同的任务)可以并行执行。这种并行性允许在同一设备上的多个操作重叠执行,从而提高了GPU的利用率和程序的执行效率。cudaSetStream(): 用于设置当前线程的执行流。cudaStreamCreate(): 用于创建执行流。cudaStreamSynchronize(): 用于等待执行流中的所有操作完成。

2024-02-01 21:51:38 486

原创 CUDA : 数据类型

只有当一个流中的所有操作都完成之后,另一个流中的操作才会开始执行。通过使用 CUDA 流,可以将不同的计算任务组织成顺序执行的批次,每个批次中的操作在 GPU 上异步执行。cudaStream_t 是 CUDA 编程中的一个数据类型,用于表示 CUDA 流。在 CUDA 中,线程块的大小是线程并行执行的关键参数,它影响着内存访问模式、负载均衡和并行度。在 CUDA 中,dim3 通常用于指定线程块的尺寸。此外,CUDA 还提供了其他与流相关的函数和概念,如事件和超队列技术,用于更细粒度的流控制和优化。

2024-02-01 21:50:24 439

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除