avatar
文章
130
标签
58
分类
37

Home
Tags
Categories
Music
港乐Live Show
Eden Mo Blog
搜索
Home
Tags
Categories
Music
港乐Live Show

Eden Mo Blog

OpenCV C++记录(八):Sobel、Scharr、Laplacian、Canny算子
发表于2025-02-06|OpenCV|C++高阶•OpenCV
Sobel算子 Sobel算子是一种边缘检测算子,由Irwin Sobel在1968斯坦福的博士生讨论会提出,在那个不重视论文和专利的年代,作者也没有为此发表论文,只在后来一本专著中公开,从此广泛被学界和工业界引用了几十年。 图像处理中经典的3阶Sobel卷积核常常表述为x方向和y方向,分别为: 此处我们发现零行两侧的系数恰好是相反数,尽管一些博客中矩阵调换了两侧符号顺序,只影响差分顺序,并不影响最终的差分结果。 Sobel算子的推导我查阅了大量博客资料,发现大多摘自电子科大彭真明教授的Sobel算子的数学基础,彭教授的参考来自文献,主要问题来自公式解读不同,以此图为坐标系: 原文公式为: 其中(1,1)、(-1,1)、(0,1)、(1,0)来自四个方向相邻点的方向向量,既然仅考虑了相邻点,所以这里是一种前向差分,前向差分表述为: 对于四分一、二分一,这里彭教授认为是一种城市距离(city-block distance),几种常见距离定义如下图: 距离定义 根据文献意图,四个方向梯度计算完成,还需要除以4以获取平均梯度,浮点数的矩阵运算是麻 ...
OpenCV C++记录(七):霍夫变换、仿射变换、透视变换
发表于2025-01-30|OpenCV|C++高阶•OpenCV
霍夫变换(Hough Transform) 霍夫变换只是一种特征变换,服务于图像霍夫直线、圆的检测,这两种图形是霍夫变换最常用的两个应用,也算基本图形,基于此扩展霍夫检测能识别图像中几乎所有的几何图形。 对人而言判断一条直线或者某种图形是非常直接简单的,而对于计算机而言,它获取的信息是像素,如何确定某一群像素就是一条共线的直线、一个圆形,如果出现像素外溢,如何辨认出这种偏差影响,是比较复杂的任务,也是霍夫变换的基本任务。 霍夫直线检测基本原理 假设给定两点像素坐标(x1,y1)和(x2,y2),可知过两点得到一条直线y = kx + b,这是笛卡尔空间的表达式,重新描述这个表达式: b = -xk + y,自变量为k、因变量为b,该空间称为霍夫空间,对于笛卡尔坐标的两点(x1,y1)和(x2,y2),分别对应b = -x1k + y1和b = -x2k + y2,即对应霍夫空间两条线,且x1不等于x2的情况下(相等的情况后文再讨论),两条霍夫空间直线必然交与一点,该点(b0,k0)同时满足两条霍夫直线方程,故知(b0,k0)就是原式y = kx + b的解。 因此,一句话表 ...
OpenCV C++记录(六):轮廓提取
发表于2025-01-26|OpenCV|C++高阶•OpenCV
OpenCV轮廓 轮廓提取任务是许多图像分析、识别的必要步骤,前置工作是将灰度图进行二值化,然后基于二值化图进行轮廓提取,本文记录了OpenCV一系列轮廓相关的分析手段,包括基本轮廓提取、绘制、外接多边形/椭圆/圆、多轮廓的交、并、差填充等。 轮廓提取与绘制 cv提供了强大的基本轮廓识别和绘制功能: 123456789101112131415161718192021222324void cv::findContours(InputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = Point())参数:image:输入的二值图像contours:轮廓信息,一般为点的二维vector,第一维是数组,代表第i个轮廓的点集,第二维是某个轮廓的第j个点hierarchy:轮廓层次信息,一般是关于Vec4i的vector,第一维代表第i个轮廓;第 ...
序列化协议Protobuf(二):C++ Proto3指南
发表于2025-01-17|CPP序列化协议|Protobuf
protobuf使用 虽然protobuf的版本管理比较拉跨,然而其使用指南可以说非常详尽与方便,具体可参考: Language Guide (proto 3) Language Guide (proto 2) C++ Generated Code Guide Protocol Buffer Basics: C++ 本文记录了其中proto3使用和C++构建和使用proto较重点的部分,只有少量proto2部分(少用; proto 3基础语法 第一行必须非空、非注释行,表示版本信息,如:syntax = "proto3";若缺省默认为proto2; 第二行一般使用package xxx;指明包名,防止不同protobuf定义的冲突; 数据类型 标量类型(Scalar Value Types) 一般数据类型,和C++数据类型类似; 类型 说明 类型 说明 double 64浮点 float 32浮点 uint32 相当于uint32,可变长度编码 fixed32 ...
序列化协议Protobuf(一):MSVC环境编译
发表于2025-01-15|CPP序列化协议|Protobuf
C++ Protocol Buffers protobuf是google推出的一个数据序列化/反序列化库,和Json/XML类似,但是其以二进制编码进行传输,而Json/XML以文本格式传输,因此文件大小更小(3-10倍)、传输速度更快(20-100倍); protobuf是一种语言无关的库,支持C++、Python、Java、Js、Ruby等主流语言,广泛用于网络、数据传输中,例如网络协议grpc; 但protobuf也不是完美的,例如它不能像Json一样即插即用,对C++而言尤为复杂,需要编译器以及runtime环境,对其他语言略微友好一点;以下记录了Win10 + MSVC编译protobuf过程,尽量列出要点,对版本无要求的可以按照本文进行,经过二次验证成功率较高,对于非C++用户/配置/VS小白/高血压患者建议使用Unix环境包管理器或vcpkg等安装依赖,无需参考本文(本文也针对禁git的生产环境。 protobuf的github仓库给出了各种语言的安装方法,但就C++安装而言其指向仍然是不清晰的,这也是issue和迭代频繁的原因,网上提供的方法许多已经过时,因 ...
CMake学习笔记
发表于2025-01-09|C/C++|CMake
cmake学习 为什么需要cmake: C/CPP复杂的编译依赖关系需要通过特定文件指定,方便大型项目管理; Cmake学习成本远低于Makefile文件; 本文主要参考两篇cmake教程良作:CMake 保姆级教程(上)和CMake 保姆级教程(下),写得比较详细,可直接移步学习; 另外,和原作不同,本文主要基于windows环境验证,基本也是大同小异. 准备工作 windows:检查cmake安装、mingw编译器安装并添加了相关环境变量 linux:cmake安装、gcc -v、g++ -v、make -v均有对应版本输出; 多文件编译 假设存在g++环境,编译以下若干示例文件方法:g++ main.cpp div.cpp multi.cpp sub.cpp add.cpp -o test.exe 123456//add.cpp#include <iostream>#include "main.h"int add(int a,int b){ return a+b;} 123456//su ...
简记:正则表达式
发表于2025-01-08
正则表达式 仅记录常识。 单字符匹配 1234567[abcd] 仅匹配列表中的单个字符[^abcde] 匹配列表以外的字符单字符[a-z] 匹配a-z,大写、数字同理[\w] 匹配小写、大写、数字、下划线,同[A-Za-z0-9_](单个字符)[\d] 匹配单个数字[\s\S] \s匹配空白符(空格、tab、换行等);\S匹配非空白符(非换行、空格、制表等);[.] 任意单字符,除了换行; 多次匹配 12345{n} 匹配n次{n,m} 匹配n到m次* *前面的字符或者表达式匹配0次或多次+ +前面的字符或者表达式匹配1次或多次? ?前面的字符或者表达式匹配0次或1次 例子: 12345678910string test = "edcbabcdex"; ...
C++ Qt数据类型
发表于2025-01-04|C++ Qt开发|C++ Qt
Qt作为一种跨平台开发工具,具有强大的基本数据类型基础,除了承袭C++和STL数据类型的衣钵,还抽象出大量的Qt特色数据类型支撑以满足应用开发的各种需求。本文记录了常用的一些数据类型,持续更新。 Qt基本数据类型 以下数据类型对应不同位数,用于要求较高的场合;跨平台环境应该避免直接使用int和long,int最常见是32位的,但是也见16位、64位;long在32位系统是32位,相当于int,在64位系统是64位的,相当于long long。 类型 大小 说明 bool 8位 布尔 int8_t/qint8 8位 signed char int16_t/qint16 16位 signed short int32_t/qint32/int 32位 signed int int64_t/qint64 64位 long long int uint8_t/quint8 8位 unsigned char uint16_t/quint16 16位 unsigned sh ...
OpenCV C++记录(五):插值算法:最近邻插、双线性插值、双三次插值
发表于2024-12-27|OpenCV|C++高阶•OpenCV
插值算法 图像放缩的过程也是像素增加、减小的过程,因此需要插值算法、采样算法等,在保证一定性能的基础上争取较好的输出质量。记录几种方法原理,对应OpenCV中几种常用插值算法,分别是最近邻插值、双线性插值、双三次插值,其性能依次递减,效果依次递增,其中双线性插值是二者比较均衡的算法,是许多插值模型的默认模式。如果对原生插值算法无兴趣,可直接跳过本文,看简单的放缩函数,不小心引出这么一大段,我想也是比较扯蛋,但终归有所收获。 最近邻插值INTER_NEAREST 最近邻插值最大的特点是:不会产生新的像素,目标图像的像素均来自源图像,新图像坐标与源图像坐标对应如下: 例如将2*2的图片放大成4*8的图片,新图(3,8)位置的像素计算: 故取原图(2,2)位置的像素。 最近邻插实现图像放大:由于我先完成了双三次和双线性插值算法再回头写这个,有些问题反而在篇头省略了。例如这里的int y_ = round((i+0.5)*scale_y-0.5)等详见后文《双线性插值优化》讨论,是一种几何中心对齐,主要是用于纠正计算参考点时几何中心偏差。 123456789101112131 ...
OpenCV C++记录(四):基本图形绘制与图像操作
发表于2024-12-21|OpenCV|C++高阶•OpenCV
图形绘制 line画线函数 123456void cv::line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0)// 参数解释:输入图形、Point起点、终点、Scalar颜色、粗细 // lineType为连接线类型(默认八方向线LINE_8),抗锯齿可使用LINE_AA// shift代表坐标缩放(除以2的shift次方) 实例: 12345678910111213141516171819202122232425262728293031323334353637#include <iostream>#include <opencv2/opencv.hpp>using namespace std;using namespace cv;int main(){ Mat img; img.create(Size ...
1…456…13
avatar
Eden
不做前端所以博客不漂亮,纯免费授权码来自公众号:摸妖猫
文章
130
标签
58
分类
37
Follow Me
公告
文章任何错误、疏漏、建议麻烦请联系博主qq邮箱2436444815@qq.com
最新文章
深入理解计算机系统CMU-15213 CSAPP(二):DataLab2025-10-08
OpenGL C++记录(二):基本渲染与着色器2025-09-30
OpenGL C++记录(一):基于MinGw的环境搭建2025-09-29
设计模式(四):组合模式、责任链模式、策略模式2025-09-23
矩阵求导2025-09-14
分类
  • C21
  • C++ Qt开发7
  • C/C++14
  • CPP24
    • C++ Generic Programming3
    • C++ boost库开发5
  • FPGA2
    • verilog2
标签
计算机图形学 格式化输出 QR分解 C++高阶 MIT 18.06 Stanford CS144 高等数学 3D目标检测 Givens变换 Effective C++ CSAPP LU分解 设计模式 ASIO异步编程 线性代数 C++ Qt SVD分解 Markdown语法 读写锁 Householder变换 网络编程 OpenGL 信号与系统 C++ SFINAF and Type Traits Git基本使用 json序列化 内存管理理论 C++11 新特性 C++ Generic Programming Linux Beast库 Private Content Linux扩容 vim使用 数值分析方法 进程与线程 拟合算法 CMake 数据库 OpenCV
归档
  • 十月 20251
  • 九月 20254
  • 八月 20256
  • 七月 20256
  • 六月 20256
  • 五月 20253
  • 四月 20254
  • 三月 20256
网站资讯
文章数目 :
130
本站总字数 :
566.3k
本站访客数 :
本站总访问量 :
最后更新时间 :
©2023 - 2025 By Eden
框架 Nodejs|你忘掉理想 只能忙于生活吗
粤公网安备 44010602011738号|粤ICP备2023072610号
搜索
数据库加载中