![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图像处理
文章平均质量分 68
图像处理常用算法
jingbo1801
机器视觉、图像,TX2,python,c++
展开
-
cv2.approxPolyDP函数实现轮廓线的多边形逼近
实际项目需要拟合轮廓线,提取更贴合目标的四个点,于是找到了cv2.approxPolyDP函数。若为 true,该函数返回一个带符号的面积值,正负取决于轮廓的方向(顺时针还是逆时针)。closed:如果为true,则闭合近似曲线(其第一个和最后一个顶点为连接的);contour:输入的二维点集(轮廓顶点),可以是 vector 或 Mat 类型。curve:输入的二维点集(轮廓顶点),可以是 vector 或 Mat 类型。epsilon:指定近似精度的参数, 这是原始曲线和它的近似之间最大距离。原创 2022-11-01 22:18:41 · 7592 阅读 · 0 评论 -
cv2 可视化操作整理(直线,圆,矩形,多边形,文本)
经常需要图像上显示下结果,用的时候却总差几个参数记不清,整理记录下。原创 2022-09-07 22:38:58 · 2120 阅读 · 0 评论 -
从卷积的角度看图像滤波器
图像滤波器可以理解为卷积操作的图像解释,平移、旋转、尺度变换、滤波、增强等等,都可以用卷积实现。 均值滤波,顾名思义就是窗口内取均值代替原来的值。用卷积模板来表示如下: 图像中的每个点,取以自己为中心的八邻域的均值作为滤波后的值。用数学表达,f 为 m*n 大小的图像,g 为 k * l 大小的卷积核,如下: 图像与一个只有中心点为 1,其它为 0 的卷积进行卷积操作,结果为自身(边界处理上与原图存在不一致)。 平移,如向右平移,卷积核右边为1,其它为原创 2022-07-09 20:01:59 · 428 阅读 · 0 评论 -
opencv最小外接矩形
经常需要用到opencv二值化、轮廓线检测、求外接矩形、最小外接矩形、矩形的四个点坐标等等,并显示。这里整理下: 阈值的作用是根据设定的值处理图像的灰度值,比如灰度大于某个数值像素点保留。通过阈值以及有关算法可以实现从图像中抓取特定的图形,比如去除背景等。cv2中的阈值相关函数有:普通阈值函数threshold,自适应阈值函数adaptivthreshold。 函数定义:retval, dst = cv2.threshold(src, thresh, maxval, type[,原创 2022-07-07 20:57:00 · 10231 阅读 · 1 评论 -
点到直线的距离直线的交点及夹角
P到直线AB的距离。2、直线的交点 利用点斜式表达直线,然后求解两条直线组成的方程组。 解得:3、直线的夹角 已知直线 l1:y=k1x+b1,l2:y=k2x+b2,求这两条直线的夹角。结论: l1 到 l2 的转向角为 θ,则 tanθ=(k2- k1)/(1+ k1*k2) l1 与 l2 的夹角为 θ,则 tanθ=∣(k2- k1)/(1+ k1*k2)∣ 注意:两直线的夹角指的是两直线所成的小于90°的锐角,显然夹角公式中的“角原创 2022-07-04 23:02:11 · 1150 阅读 · 0 评论 -
opencv 判断点在多边形内外
基于Python 和 OpenCV 画出多边形,以及判断某个点是不是在多边形内。 函数定义:cv2.pointPolygonTest(contour, pt, measureDist) 函数功能:找到图像里的点和轮廓之间的最短距离. 它返回的距离当点在轮廓外的时候是负值,当点在轮廓内是正值,如果在轮廓上是0。 其中,contour 为轮廓多边形;pt 为坐标点;measureDist, 若为True,是找带符号的距离;若为False,会找点是否在内,外,或轮廓上(相原创 2022-07-04 23:00:24 · 6839 阅读 · 0 评论 -
SLAM14讲中Sophus包的安装问题
SLAM14中,useSophus.cpp工程编译中报错: 报错原因:makelist中找不到Sophus头文件。我们分两步处理: 进入源码目录,编译,安装。2、在CMakeLists.txt文件中添加Sophus_INCLUDE_DIRS变量 观看错误信息,其实就是找不到Sophus库和头文件的内容: 比如,我的是这样的: 然后再将你的执行文件链接上Sophus库文件。这样的话,上述编译错误应该就可以消失了。...原创 2022-06-21 22:29:10 · 1221 阅读 · 0 评论 -
Eigen 常用操作
Eigen是一个高层次的C ++库,支持线性代数,矩阵和矢量运算,数值分析及其相关的算法。本例程包含头文件:1、数据结构 Eigen 数据结构如下,单精度与双精度转换把 d 换为 f。 旋转矩阵(3*3):Eigen::Matrix3d。 旋转向量(3*1):Eigen::AngleAxisd。 欧拉角(3*1):Eigen::Vector3d。 四元素(4*1):Eigen::Quaterniond。 欧式变换矩原创 2022-06-20 23:01:57 · 2541 阅读 · 0 评论 -
win10上vs2017配置Eigen3开发环境
Eigen是一个高层次的C ++库,支持线性代数,矩阵和矢量运算,数值分析及其相关的算法。是一个由头文件组成的库,可以不用编译,直接下载,加载到本地项目。 官网下载地址:http://eigen.tuxfamily.org/index.php?title=Main_Page,目前最新版本为3.4.0,我们就下载对应的zip即可。 解压后,目录里面有很多文件,其中包含Eigen库。 step1、新建项目,名为test_eigen。 step2、平台选为D原创 2022-06-20 22:55:00 · 884 阅读 · 0 评论 -
摄像机几何2
目录1、世界坐标系2、摄像机外参数(世界坐标系->相机坐标系)3、完整相机模型参数含义3.1、各个符号的物理意义及其维度分别是什么3.2、投影矩阵M有多少个自由度3.3、P`转换为欧式坐标如何写4、定理5、投影变换的性质1、世界坐标系摄像机坐标系描述三维物体的空间信息不太方便,所以引入世界坐标系,将物体从世界坐标系转换到摄像机坐标系。2、摄像机外参数(世界坐标系->相机坐标系)可以把世界坐标系下的点通过旋转和平移...原创 2022-02-17 22:28:00 · 572 阅读 · 0 评论 -
摄像机几何
目录1、摄像机坐标系下的三维点至像素坐标系的映射2、齐次坐标3、齐次坐标系中的投影变换4、摄像机偏斜1、摄像机坐标系下的三维点至像素坐标系的映射这里将的焦距为摄像机的焦距。真实世界里我们得到的是数字图像(以像素为单位),像平面本身仍为连续的(以米为单位)。我们最终拿到的图像,为像素。像素平面坐标系为x-y,像平面坐标系(xc-yc)以中心为原点,如下图:摄像机坐标系下一个三维点P到像素平面映射为:1、偏置像素平面坐标系远点在左下...原创 2022-02-17 22:18:33 · 2122 阅读 · 0 评论 -
增加透镜的针孔相机
1、加透镜的好处1.1、增加了照片的亮度增加透镜,将多条光线聚焦到胶片上,增加了照片的亮度。结果是P点的很多条光线都可以映射到P`点,增加图像的清晰度。1.2、透镜将光线聚焦到胶片上1)所有平行于光轴的光线都会会聚到焦点,焦点到透镜中心的距离称为镜头焦距。(小孔成像模型的焦距为光心到胶片的距离,与此处的f不一样)2)穿过中心的光线的方向不会发生改变。3、近轴折射模型带透镜的小孔成像模型。摄像机的焦...原创 2022-02-14 22:50:33 · 1891 阅读 · 0 评论 -
针孔相机模型
1、如何通过相机记录世界?想法:将胶片直接放置在物体前方。从上面的图可以看出,胶片放在物体前面,让物体和胶片之间没有任何阻拦的时候不能形成像。胶片上的一个点接收到来自物体上的多个点的信息,从这样的图像上,你是看不到任何东西的,看起来就是模糊一团,你也分不清楚这个图像到底记录了啥。2、针孔摄像机想法:添加屏障,减少模糊。一种最简单的成像方法,就是在这个物体和这个成像平面里面有一个交点,之间加一个一个隔板,隔板中间一...原创 2022-02-14 22:10:02 · 3310 阅读 · 0 评论 -
opencv光流检测(三)
转自:https://blog.csdn.net/gh_home/article/details/515029331、定义空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。也就是说,由空间域到图像平面的投影。而通俗来讲,把图像中的每一个点的瞬时速度和方向找出来就是光流。2、光流有什么用通过光流判断物体距离我们的远近。 ...转载 2021-07-20 22:24:44 · 862 阅读 · 0 评论 -
点关于点旋转计算新坐标
假设对图片上任意点(x,y),绕一个坐标点(rx0,ry0)逆时针旋转a角度后的新的坐标设为(x0, y0),有公式:x0 = (x-rx0)*cos(a)- (y-ry0)*sin(a) + rx0; y0 = (x-rx0)*sin(a) + (y-ry0)*cos(a) + ry0;测试逻辑:设置大小为512*512的画布,绿色点(100, 100)沿着红色中心点(200, 300)顺时针旋转30度。旋转结果为黄色点。import cv2imp...原创 2021-09-11 16:35:30 · 1425 阅读 · 1 评论 -
opencv光流检测(一)
转自:https://www.cnblogs.com/riddick/p/10586662.htmlLucas–Kanade光流算法是一种两帧差分的光流估计算法。它由Bruce D. Lucas 和 Takeo Kanade提出 [1]。LK光流法有三个假设条件:1、亮度恒定:一个像素点随着时间的变化,其亮度值(像素灰度值)是恒定不变的。这是光流法的基本设定。所有光流法都必须满足。2、小运动: 时间的变化不会引起位置的剧烈变化。这样才能利用相邻...转载 2021-07-20 22:09:09 · 569 阅读 · 0 评论 -
SHI-TOMASI角点检测-opencv goodFeaturesToTrack函数
知道了什么是Harris角点检测,后来有大佬在论文《Good_Features_to_Track》中提出了它的改进版——Shi-Tomasi角点检测,Shi-Tomasi方法在很多情况下可以得到比Harris算法更好的结果。Harris角点检测中每个窗口的分数公式是将矩阵M的行列式与M的迹相减:由于Harris角点检测算法的稳定性和k值有关,而k是个经验值,不好设定最佳值。Shi-Tomasi发现,角点的稳定性其实和矩阵M的较小...原创 2021-07-23 23:18:56 · 2219 阅读 · 1 评论 -
harris角点检测算法实现
算法流程:1、将图像转换为灰度图像;2、利用Sobel滤波器求出 海森矩阵 (Hessian matrix) :3、将高斯滤波器分别作用于Ix²、Iy²、IxIy;4、计算每个像素的 R= det(H) - k(trace(H))²。det(H)表示矩阵H的行列式,trace表示矩阵H的迹。通常k的取值范围为[0.04,0.16];5、满足 R>=max(R) * th 的像素点即为角点。th常取0...原创 2021-07-23 22:58:50 · 2323 阅读 · 3 评论 -
harris角点检测原理
1、角点概述如果一个点在任意方向的一个微小变动都会引起灰度很大的变化,那么我们就把它称之为角点,也就是一阶导数(即灰度图的梯度)中的局部最大所对应的像素点就是角点。在现实世界中,角点对应于物体的拐角,道路的十字路口、丁字路口等。基于图像灰度的方法通过计算点的曲率及梯度来检测角点。2、数学知识1)泰勒展开泰勒展开公式是一种统一的形式,非常完美。一维泰勒展开公式:二维泰勒展开公式:2)矩阵的特征值和特征向量...原创 2021-07-23 22:51:57 · 8105 阅读 · 7 评论 -
opencv光流检测(二)
转自:https://blog.csdn.net/ap1005834/article/details/51226660转载 2021-07-20 22:14:54 · 133 阅读 · 0 评论 -
FAST算子
1、FAST算子思路:对像素点p,如果p与邻域内的很多点都存在某一属性的差异(灰度图像上的亮度), 则认为p与周围像素不同, 可以当做特征点。优化:对像素点p,以p为圆心画一个半径为3像素的圆,圆周上有16个像素点。只计算这些点和p的差异。如果有连续n个(一般n=12)像素点与p的灰度值的差的绝对值大于阈值, 则p是FAST特征点。n为12时,16个点中的1、9、5、13(垂直线和水平线的四个交点),如果p是特征点,那么这4个点中至少有3 ...原创 2021-09-12 22:50:24 · 1042 阅读 · 0 评论 -
BRIEF特征描述子
BRIEF:Binary Robust Independent Elementary FeaturesBRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度直方图描述特征点的传统方法,大大的加快了特征描述符建立的速度,同时也极大的降低了特征匹配的时间,是一种非常快速,很有潜力的算法。BRIEF的特征点位置可利用FAST、Harris检出,或者SIFT、SURF等算法检测特征点的位置,之后使用BRIEF建立特征描述符。算法步骤:ste...原创 2021-09-11 23:24:26 · 2182 阅读 · 0 评论