logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

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

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

#opencv#人工智能#计算机视觉
cv::Mat 三种像素访问方式性能对比:`at`、`ptr` 和 `data` 到底谁更快

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

#opencv#学习#c++
OpenCV源码阅读二:cvtColor阅读

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

#opencv#webpack#人工智能
bitwise_not`性能测试:手写普通循环、AVX2 与 OpenCV 内置实现对比

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

#opencv#webpack#人工智能
OpenCV源码阅读一: threshold源码

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

#opencv#webpack#人工智能 +2
SIMD常见操作,结合样例一文理解

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

#c++#算法#开发语言
到底了