自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 NEON 入门:把它理解成 ARM 平台上的 SSE / AVX

很多人第一次接触 NEON 时,会觉得它名字陌生、指令命名奇怪、资料也不像 SSE/AVX 那么常见,于是很容易把它当成一个全新的东西去学。但如果你已经接触过 SSE、AVX,或者已经理解了 SIMD 的基本思想,那么 NEON 的入门其实并不难。。一旦你把这层关系想清楚,后面的很多知识就会自动归位。

2026-03-31 11:29:09 373

原创 bitwise_not`性能测试:手写普通循环、AVX2 与 OpenCV 内置实现对比

在学习 SIMD 的时候,我拿一个非常基础、也非常适合向量化的操作做了次测试:图像按位取反,也就是。这个操作本身并不复杂,本质上就是把每个字节和0xFF做一次异或,因此很适合作为 SIMD 入门练手题。一方面它逻辑简单,容易手写;另一方面它的数据规模通常较大,性能差异也比较容易测出来。这次我一共对比了三种实现方式:一种是最普通的逐字节循环,一种是自己手写的 AVX2 版本,最后一种则是直接调用 OpenCV 自带的。

2026-03-20 10:58:06 534

原创 OpenCV 阈值二值化优化实战:LUT 并行、手写 AVX2 与 cv::threshold 性能对比

在图像处理中,阈值二值化是一个非常基础但又非常经典的操作。它的逻辑并不复杂:对图像中的每个像素做一次判断,大于阈值就赋值为某个最大值,否则赋值为 0。以 OpenCV 的从算法角度看,这件事几乎没有“算法难度”,因为它本质上只是一次逐元素扫描。但也正因为逻辑极其简单,它特别适合用来研究:普通循环能不能更快?查表能不能更快?并行能不能更快?手写 AVX2 能不能打过 OpenCV 自带实现?,并对性能结果做一个系统分析。

2026-03-19 00:16:22 265

原创 SIMD常见操作,结合样例一文理解

如果用 AVX,一次load然后做一次add再store这就是 SIMD 最核心的执行模型。

2026-03-17 23:29:02 427

原创 SIMD基础知识理解

它的目标不是改变算法本身,而是把原来“一个一个算”的方式,变成“一批一批算”。先从最基础的标量计算说起。传统标量计算里,一条指令通常只处理一个数据。如果按标量方式理解,就是 CPU 一次取a[i]和b[i],算出一个结果,再去算下一个。所以它的感觉像是“单兵作战”,每次只处理一个元素。而 SIMD 的思路是,。比如有 8 个float,如果寄存器足够宽,就可以一次把 8 个数都装进去,然后一条加法指令把这 8 对数据同时算完。。

2026-03-16 17:07:24 402

原创 OpenCV源码阅读三:blur / boxFilter 阅读

它的职责不是自己把所有计算细节都做完,而是根据当前输入图像的类型、边界模式、是否是 UMat、是否有 ROI、核大小是多少、平台支持什么优化路径等条件,去选择最合适的一条执行路线。也就是说,OpenCV 并不是把所有情况都塞进一个“大而全但不够快”的统一实现里,而是会先把一些最常用的情况捞出来,做更细的优化。思路非常直接:遍历输出图像的每个像素,以它为中心取一个窗口,把窗口内的所有像素累加起来,再除以窗口面积,最后写到输出图像里。如果只是做一个能跑的均值模糊,我们自己当然也能写出来,甚至十几二十行就够了。

2026-03-14 00:22:51 218

原创 OpenCV源码阅读二:cvtColor阅读

意思不是一个像素一个像素算,而是:一次加载很多个 BGR 像素,拆成 b/g/r 三组向量,并行做乘法、加法、右移,最后一次性得到一批灰度值。本质就是 Gray=0.114B+0.587G+0.299R 但是OpenCV为了效率将它换为整数计算,再右移还原。如果取BGR各个分量的平均值也能得到一个灰度值,但效果不够符合人眼视觉。所以灰度转换时,绿色权重最大,蓝色最小。第一,判断输入图像的数据类型。OpenCV 这里用的是。,比我的八位缩放精度更高。再除以 2^shift。

2026-03-12 21:57:04 486

原创 OpenCV源码阅读一: threshold源码

这里的关键思想是,threshold 属于逐点独立运算,没有跨行依赖,所以按行切分不会产生同步问题。后面的图像处理不再关心 threshold 的数学含义,它只关心“源值是多少,就去表里取什么结果”。因为 LUT 的下标一定是 0 到 255,如果阈值本身跑到了这个范围外,就会让映射规则失真,所以要先修正。每个线程在自己的行区间里,逐行取出源图像和目标图像的首地址,然后把这一行当成一段连续字节流处理。这一段的作用是把后续处理所需的上下文全部准备好,也就是“输出缓冲区准备好、规则准备好”。

2026-03-11 00:29:35 246

原创 cv::Mat 三种像素访问方式性能对比:`at`、`ptr` 和 `data` 到底谁更快

在学习 OpenCV 的过程中,很多人都会接触到 的逐像素访问,而最常见的三种写法,就是 、 和直接使用 指针。表面上看,这三种方式都能拿到像素并完成修改,但它们在底层访问路径、边界抽象层级以及编译器优化空间上并不完全一样。因此,一个很自然的问题就是:在真实代码中,这三种方式到底谁更快,差距又有多大?这次我专门写了一个基于 Google Benchmark 的小测试,对 的三种典型访问方式进行了对比。测试目标非常明确,就是让三种方式做完全相同的工作:遍历整张彩色图像,把每个像素的三个通道都做一次按位异

2026-03-09 17:01:12 463

原创 深入理解 cv::Mat:从本质到内存管理,一篇讲清楚 OpenCV 最核心的数据结构

cv::Matcv::Matcv::Mat看似只是一个图像容器,实际上它背后藏着非常典型而且非常优雅的 C++ 资源管理思想。它通过头部分离、浅拷贝共享、引用计数控制、深拷贝按需触发、ROI 零拷贝视图以及缓冲区复用等机制,在“好用”和“高效”之间取得了非常漂亮的平衡。很多时候,真正把 OpenCV 用顺手,并不取决于你会不会调用某个算子,而取决于你有没有真正理解Mat的行为边界。希望这篇文章能帮你把cv::Mat。

2026-03-09 15:48:32 413

原创 OpenCV学习笔记二(色彩空间:RGB、HSV、Lab、mask)

数字图像处理中的掩膜的概念是借鉴于PCB制版的过程,在半导体制造中,许多芯片工艺步骤采用光刻技术,用于这些步骤的图形“底片”称为掩膜(也称作“掩模”),其作用是:在硅片上选定的区域中对一个不透明的图形模板遮盖,继而下面的腐蚀或扩散将只影响选定的区域以外的区域。色相是色彩的基本属性,就是平常说的颜色的名称,如红色、黄色等,H由绕V轴的旋转角给定,红色对应于角度0°,绿色对应于角度120°,蓝色对应于角度240°,每一种颜色和它的补色相差180°;明度(V),颜色明亮的程度,明度值与发光体的光亮度有关。

2025-07-17 19:15:46 1268

原创 OpenCV学习笔记一(Mat对象)

OpenCV图像处理核心操作摘要:Mat类是OpenCV的基础数据结构,存储图像数据(BGR顺序),包含data指针、维度、通道数和像素深度等属性。关键操作包括:1)使用Rect类提取ROI区域;2)通过加减乘除运算调整亮度/对比度;3)位运算实现逻辑操作;4)cvtColor函数转换色彩空间;5)split/merge函数分离合并通道。这些操作为图像处理提供了基础工具,涉及像素级运算、区域提取和通道管理等核心功能。

2025-07-17 18:23:36 358

原创 socket编程:一个服务器服务一个客户端的连接样例程序使用class封装

【代码】socket编程:一个服务器服务一个客户端的连接样例程序使用class封装。

2024-01-25 16:48:13 521

原创 最长回文子串的几种解法

第二种:刚学会的dp写法(顺便了解到了substr)第一种:非常简陋的中心拓展法,很丑陋。这个题写的时候扣爆了脑袋。这是目前想到的几种解法。

2024-01-08 21:42:01 514

原创 关于位运算的学习

感觉位运算很简单,但是用的时候就是一团浆糊多刷点题看看能不能学懂,现在根本不知道位运算是干嘛的面试题 17.04. 消失的数字 - 力扣(LeetCode)class Solution {public: int missingNumber(vector<int>& nums) { int s=nums.size(); int num=0; for(int i=0;i<=s;i++){

2023-12-25 17:28:17 565

原创 C. Quests(动态规划)

晚上写的时候用了动态规划。很蠢的开了dp[][]其实开个dp[]就好了。

2023-12-22 09:41:32 689

原创 第十五届西南民族大学程序设计新生赛(热身赛)

因为自动贩卖机没有找零的功能,所以如果小w想购买X元的泡面就必须准确投入总和为X元的硬币。现在小w手里只有A枚1元硬币,B枚5元硬币和C枚十元硬币,请问小w能否成功购买泡面。输入一行四个整数A,B,C,X,保证1≤A,B,C≤10000,1≤X≤105。时间限制:C/C++ 1000MS,其他语言 2000MS。小w饿了,但是太晚了,小w只能去自动贩卖机购买泡面。今年的双十一太冷清了,冷清到没人愿意在网上购物了。隔壁西南民大的c题,卡半天,记录一下后面来解。如果无法购买,则输出一行。

2023-12-21 23:11:45 502

原创 美丽塔 II(栈)

单调栈还没学,用暴力写了一发爆内存了。记录一下下次微调一下。

2023-12-21 14:54:35 409

原创 2828. 判别首字母缩略词

简单题我直接重拳出击。

2023-12-20 23:23:30 463 1

原创 Educational Codeforces Round 160 (Rated for Div. 2)

Problem - A - CodeforcesA题:是一个分割数字并且输出的问题,将一个数字分割为a,b并且a<b&&a和b都没有先导0解法:先将这个数字分为字符串s和整数p两个形式的,然后再遍历,a=p/n,b=p%n&&s[i]!=‘0’#include<bits/stdc++.h>#define int long longusing namespace std;signed main(){ int t; cin>>

2023-12-19 10:11:39 487 1

原创 162. 寻找峰值

就找最大值,最大值一定是峰值。但还是下意识的用枚举写了。今天的题是一个二分题。

2023-12-18 00:35:56 437 1

原创 746. 使用最小花费爬楼梯(初遇动态规划)

计算dp[i]时忘记加上以前积累的dp[i-n]了。第一次遇见动态规划的题,还是现场学的。

2023-12-17 01:08:41 411 1

原创 852. 山脉数组的峰顶索引(初遇二分)

根据题解改了下,while判断那里有点问题,为什么会超时啊。题目就是简单的查询最大值并返回下标嘛,但是要求有点头疼。自己写的二分和学到的不一样,但我感觉原理相同。第一次使用二分,不出意外的超时了。

2023-12-17 00:17:46 429 1

原创 1422. 分割字符串的最大得分

左子字符串 = "0" 且 右子字符串 = "11101",得分 = 1 + 4 = 5。左子字符串 = "01" 且 右子字符串 = "1101",得分 = 1 + 3 = 4。左子字符串 = "011" 且 右子字符串 = "101",得分 = 1 + 2 = 3。左子字符串 = "0111" 且 右子字符串 = "01",得分 = 1 + 1 = 2。左子字符串 = "01110" 且 右子字符串 = "1",得分 = 2 + 1 = 3。子字符串)所能获得的最大得分。「分割字符串的得分」为。

2023-12-16 18:19:55 445 1

原创 867. 转置矩阵

是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。我的解法:使用一个新的vector接受。题解:唔,也是这样的,win!给你一个二维整数数组。

2023-12-16 17:44:44 431 1

原创 263.丑数

然后看了下题解,只含有2/3/5这三个质因数,则一直除以这三个数可以回到0。这道题以我的思路一直判断,嵌套多个循环导致超时。还看到一个有意思的写法。

2023-12-16 14:32:55 558 1

原创 6-4 奇数值结点链表

int n;while(n!=-1){head=p_new;p=head;else{=NULL){p=p->next;p2=*L;while(p2!=NULL){=0){}else{}else{}else{

2023-12-16 08:00:10 467 1

原创 网络编程入门学习之socket

INADDR_ANY转换过来就是0.0.0.0,泛指本机的意思,也就是表示本机的所有IP,因为有些机子不止一块网卡,多网卡的情况下,这个就表示所有网卡ip地址的意思。read() 函数会从 fd 文件中读取 nbytes 个字节并保存到缓冲区 buf,成功则返回读取到的字节数(但遇到文件结尾则返回0),失败则返回 -1。函数的第一个参数用来标识服务端套接字(也就是listen函数中设置为监听状态的套接字)bind函数用于把某种形式的参数列表与已知的函数进行绑定,形成新的函数。返回值对应客户端套接字标识。

2023-12-15 20:24:15 2576

原创 6-5 删除单链表偶数节点

函数createlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。函数deleteeven将单链表head中偶数值的结点删除,返回结果链表的头指针。

2023-12-15 11:28:08 1018

原创 socket编程:一个服务器服务一个客户端的连接样例程序

在网上只找到这个项目用于学习,开个博客保存一下。服务端service。

2023-12-15 11:07:20 966

空空如也

空空如也

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

TA关注的人

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